gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:56:02 24 4
gpt4 key购买 nike

我使用 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 方法缓存,但从我的外部配置文件中禁用它?我不想修改应用程序上下文或代码来启用/禁用方法缓存。只能修改我们在应用中使用的配置文件。

最佳答案

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

关于java - 通过外部属性禁用 spring 方法缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14336520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com