我正在测试ehcache的grails。我无法使缓存无效。 我的测试代码: 服务方式:
@Transactional
class HelpService {
@Cacheable('newcache')
def inlineCacheService(def param) {
println ("I am in the function")
MyTestClass a = new MyTestClass()
a.paramA = new Date()
a.paramB = [
id: "1",
data: "f"
]
return a
}
控制器中的代码:
render "<br/>4: " + helpService.inlineCacheService("test").paramA
Thread.sleep(2000)
CacheManager cm = CacheManager.getInstance();
Cache myCache = cm.getCache("newcache")
myCache.removeAll()
render "<br/>4: " + helpService.inlineCacheService("test").paramA
我在删除所有时收到空指针异常。为什么找不到newcache?我在cachable注释中使用此名称,并将其放在我的CacheConfig.groovy中。
我的CacheConfig.groovy:
config = {
cache {
name 'inlinecache'
//Overwrite these, inherit rest
timeToLiveSeconds 20
}
cache {
name 'newcache'
//Overwrite these, inherit rest
timeToLiveSeconds 30
}
defaultCache {
//Just inherit from defaults
}
defaults {
timeToIdleSeconds 120
timeToLiveSeconds 120
eternal false
overflowToDisk false
maxElementsInMemory 10000
maxElementsOnDisk 10000000
memoryStoreEvictionPolicy="LRU"
}
}
使用此代码可以:
CacheManager.ALL_CACHE_MANAGERS.each { cm ->
println (cm.getName())
String[] names = cm.getCacheNames();
for (String name : names)
{
Cache cache = cm.getCache(name);
println (name)
cache.removeAll();
}
};
但是没有更好的解决方案吗?
祝你好运 彼得
答案 0 :(得分:1)
我不是Grails专家,但你所拥有的很可能是两个CacheManager
定义的:
CacheManager.getInstance()
最终会创建默认的未命名CacheManager
,但对您配置的缓存一无所知。所以我会查找您指定的Ehcache配置,我会更新您的代码段中的代码以获得相同的CacheManager
。
使用CacheManager.getCacheManager(String name)
转到现有CacheManager
。如果您通过null
,则会获得以CacheManager
命名的CacheManager.DEFAULT_NAME
。