grails - Grails ehcache失效不起作用

标签 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
}

Controller 中的代码:
 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?我在可缓存的批注中使用此名称,并将其存储在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();
        }
    };

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

最好的祝福
彼得

最佳答案

我不是Grails专家,但是您最有可能定义了两个CacheManager:

Grails的

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

  • 因此,我将查找您指定的Ehcache配置,并更新代码段中的代码以获取相同的CacheManager

    使用CacheManager.getCacheManager(String name)可以获取现有的CacheManager。如果传递null,它将获得以CacheManager命名的CacheManager.DEFAULT_NAME

    关于grails - Grails ehcache失效不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33731450/

    相关文章:

    grails - 将GORM关系过滤到DTO对象中

    grails - Netbeans的Grails Paypal插件

    grails - 如何在 Geb grails 中设置和拆卸功能测试数据

    spring - Hibernate 二级缓存在运行几个 Spring 测试时关闭

    Grails - 可搜索插件 : Cannot search data in a one to many relationship

    grails - Grails 3.1.5配置文件:rest-api不需要持久性

    Hibernate二级缓存<<net.sf.ehcache.hibernate.EhCacheProvider>>

    java - ehcache缓存项错误

    java - 限制调用 Spring Boot Rest 端点,直到完成从数据库的映射

    hibernate - Spring Data + Hibernate 查询缓存不起作用