加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 06:06:28 所属栏目:Java 来源:网络整理
导读:我使用ehcache和注释驱动配置配置了 spring方法缓存. 但是,我希望能够从我们在应用程序中使用的配置文件中禁用它. 我的第一个想法是如果禁用方法缓存,则调用net.sf.ehcache.CacheManager.CacheManager(),不带参数.抛出异常: java.lang.IllegalArgumentExcep
我使用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缓存.

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读