Grails ehache失效无法正常工作

时间:2015-11-16 08:55:17

标签: grails ehcache

我正在测试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();
        }
    };

但是没有更好的解决方案吗?

祝你好运 彼得

1 个答案:

答案 0 :(得分:1)

我不是Grails专家,但你所拥有的很可能是两个CacheManager定义的:

  • Grails的一个 - 很可能是一个命名的
  • 然后在您的代码段中,CacheManager.getInstance()最终会创建默认的未命名CacheManager,但对您配置的缓存一无所知。

所以我会查找您指定的Ehcache配置,我会更新您的代码段中的代码以获得相同的CacheManager

使用CacheManager.getCacheManager(String name)转到现有CacheManager。如果您通过null,则会获得以CacheManager命名的CacheManager.DEFAULT_NAME