Ehcache按需从DB重新加载(手动刷新)

时间:2016-06-21 23:08:16

标签: java ehcache

我想清除缓存(ehcache)并从数据库重新加载(我想要这个以手动刷新我们的一些要求)。对于我使用的方法

CacheManager.removalAll();

之后我尝试了两种方法但是我得到了如下所述的相同错误(这里可能有问题)

1)

for (String cacheName : cacheNames) {
    cache = lvCacheMgr.addCache(cacheName);
}

2)

for (String cacheName : cacheNames) {
    lvCacheMgr.addCache(cacheName);
    cache = lvCacheMgr.getCache(name);
    cache.initialise();
}

然后我收到如下错误

Caused by: java.lang.IllegalStateException: The org.hibernate.cache.StandardQueryCache Cache is not alive.
    at net.sf.ehcache.Cache.checkStatus(Cache.java:2199)
    at net.sf.ehcache.Cache.get(Cache.java:1354)
    at org.hibernate.cache.EhCache.get(EhCache.java:74)
    at org.hibernate.cache.StandardQueryCache.get(StandardQueryCache.java:105)
    at org.hibernate.loader.Loader.getResultFromQueryCache(Loader.java:2163)
    at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2126)
    at org.hibernate.loader.Loader.list(Loader.java:2096)
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
    at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)

1 个答案:

答案 0 :(得分:0)

CacheManager.removeAll是一种从Cache移除CacheManager的方法,而不是清除Cache内容的方法。

如果您想稍后执行此操作,则需要调用Cache.removeAll,以便从CacheManager本身访问所有缓存。