6

我使用 ehcache 和注释驱动配置配置了 spring 方法缓存。

但是,我希望能够从我们在应用程序中使用的配置文件中禁用它。

net.sf.ehcache.CacheManager.CacheManager()如果方法缓存被禁用,我的第一个想法是不带参数调用。这会引发异常:

java.lang.IllegalArgumentException: loadCaches must not return an empty Collection
at org.springframework.util.Assert.notEmpty(Assert.java:268)
at org.springframework.cache.support.AbstractCacheManager.afterPropertiesSet(AbstractCacheManager.java:49)

我的第二个想法是net.sf.ehcache.CacheManager.CacheManager()使用默认数据配置,以便不使用缓存(maxElementsInMemory 0 等)。但是后来缓存还在使用,这不是我想要的。

有一个属性net.sf.ehcache.disabled,但我不想禁用也使用 ehcache 的休眠缓存。

Q如何将所有内容配置为具有 spring 方法缓存但从我的外部配置文件中禁用它?我不想修改应用程序上下文,也不想修改启用/禁用方法缓存的代码。只能修改我们在应用中使用的配置文件。

4

2 回答 2

8

我正在寻找的是NoOpCacheManager

为了使它工作,我从 xml bean 创建切换到工厂

我做了如下的事情:

@Bean
public CacheManager cacheManager() {
    final CacheManager cacheManager;        
    if (this.methodCacheManager != null) {
        final EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager();
        ehCacheCacheManager.setCacheManager(this.methodCacheManager);
        cacheManager = ehCacheCacheManager;
    } else {
        cacheManager = new NoOpCacheManager();
    }

    return cacheManager;
}
于 2013-01-17T16:01:25.490 回答
3

您可以使用弹簧配置文件来启用(或不启用)弹簧缓存支持

<beans profile="withCache">
   <cache:annotation-driven />
</beans>
于 2013-01-15T13:29:59.633 回答