【发布时间】:2020-01-22 20:25:59
【问题描述】:
net.sf.ehcache.CacheManager.ALL_CACHE_MANAGERS 中是否有替代品
<!-- https://mvnrepository.com/artifact/org.ehcache/ehcache -->
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.8.1</version>
</dependency>
?
这是我需要修改以使用版本 3.8.1 的代码:
import org.ehcache.CacheManager;
.
.
.
List list = CacheManager.ALL_CACHE_MANAGERS;
for (int i = 0, n = list.size(); i < n; i++) {
CacheManager cm = (CacheManager) list.get(i);
log.debug("CacheManager: " + cm.getName());
if (cm.getName().equals(CACHE_MANAGER_NAME)) {
log.debug("CM " + CACHE_MANAGER_NAME + " existed. Destroying it.");
cm.shutdown();
}
}
在 ehcache 3.8.1 中有没有办法做到这一点?
【问题讨论】:
-
这可能是个愚蠢的问题,但为什么您首先需要与
ALL_CACHE_MANAGERS联系?你有cm,那么为什么不假设它存在(为什么不应该呢?)并关闭它? -
我没有
cm。cm在我从CacheManager.ALL_CACHE_MANAGERS获得的列表中。 -
我的猜测是这个“常量”被认为是一种不好的做法,因此被删除了。我建议您自己维护一个类似的列表,在创建它们时将新的
CacheManagers 添加到列表中(可能作为服务抽象出来)。这可能是开发人员一开始就试图强迫你做的事情。 -
你在使用 JCache 吗?有一个
Caching.getCachingProviders()方法可能有效 - javadoc 说它返回所有缓存提供程序(并通过它返回缓存管理器).. -
我使用的是 ehcache 3.8.1。那是JCache吗?
Caching的包名是什么?