Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过外部属性禁用spring方法缓存_Java_Spring_Ehcache - Fatal编程技术网

Java 通过外部属性禁用spring方法缓存

Java 通过外部属性禁用spring方法缓存,java,spring,ehcache,Java,Spring,Ehcache,我使用ehcache和注释驱动配置配置了spring方法缓存 但是,我希望能够从应用程序中使用的配置文件中禁用它 我的第一个想法是,如果方法缓存被禁用,则调用net.sf.ehcache.CacheManager.CacheManager()。这会引发异常: java.lang.IllegalArgumentException: loadCaches must not return an empty Collection at org.springframework.util.Assert.no

我使用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的hibernate缓存

Q
我如何配置一切,使其具有spring方法缓存,但从外部配置文件中禁用它?我不想修改应用程序上下文或代码来启用/禁用方法缓存。只能修改应用程序中使用的配置文件。

您可以使用,来启用(或不启用)spring缓存支持

<beans profile="withCache">
   <cache:annotation-driven />
</beans>

我要找的是
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;
}

如何通过xml启用spring缓存功能?您使用Spring 3.1吗?我使用Spring 3.1和注释驱动缓存,正如我尝试该解决方案的文档中所述,但我无法通过编程测试缓存标志,然后在不刷新上下文的情况下打开缓存配置文件。