如何在spring中以编程方式清除ehcache对象

时间:2014-07-25 12:11:52

标签: java spring caching ehcache

现在我的项目需要触发刷新所有活动的缓存对象。基于我的所有发现,我编写了以下代码。

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);
        }

3 个答案:

答案 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)