现在我的项目需要触发刷新所有活动的缓存对象。基于我的所有发现,我编写了以下代码。
Collection<String> names = cacheManager.getCacheNames();
for (String name : names) {
Cache cache = cacheManager.getCache(name);
cache.put(name, null);
}
这里cacheManger是@Autowired EhCacheCacheManager cacheManager的对象。即使我尝试过cache.evict(name);但是,对于密钥缓存来说,所有这些hack对我来说都不起作用。
是的,我也使用以下代码片段尝试了基于注释的环境:
@Caching(evict = { @CacheEvict(value = "cache1", allEntries = true), @CacheEvict(value = "cache2", allEntries = true) })
public static boolean refresh() {
return true;
}
所以我想要刷新所有的ehcached缓存对象。
我对清除所有缓存有一个理解,如果我能获得所有密钥,那么我可以使用以下代码片段刷新它们:
Cache cache = cacheManager.getCache(nameOfCache);
if (cache.get(keyOfCache) != null) {
cache.put(keyOfCache, null);
}
答案 0 :(得分:3)
Javaslang Vavr +缓存管理器:
List.ofAll(cacheManager.getCacheNames())
.map(cacheManager::getCache)
.forEach(Cache::clear);
答案 1 :(得分:3)
随着Spring 4向上,Java 8向上,你可以写:
cacheManager.getCacheNames().stream()
.map(cacheManager::getCache)
.forEach(Cache::clear);
这类似于Przemek Nowaks的回答,但不需要使用静态List
方法。
答案 2 :(得分:2)