java – 禁用通过外部属性的spring方法缓存

前端之家收集整理的这篇文章主要介绍了java – 禁用通过外部属性的spring方法缓存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用ehcache和注释驱动配置配置了 spring方法缓存.

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

我的第一个想法是如果禁用方法缓存,则调用net.sf.ehcache.CacheManager.CacheManager(),不带参数.抛出异常:

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

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

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

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

解决方法

我要找的是NoOpCacheManager:

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

我做了如下的事情:

  1. @Bean
  2. public CacheManager cacheManager() {
  3. final CacheManager cacheManager;
  4. if (this.methodCacheManager != null) {
  5. final EhCacheCacheManager ehCacheCacheManager = new EhCacheCacheManager();
  6. ehCacheCacheManager.setCacheManager(this.methodCacheManager);
  7. cacheManager = ehCacheCacheManager;
  8. } else {
  9. cacheManager = new NoOpCacheManager();
  10. }
  11.  
  12. return cacheManager;
  13. }

猜你在找的Java相关文章