在grails中使用springcache插件

时间:2012-07-05 21:23:10

标签: caching grails service aspectj ehcache

我一直在尝试将SpringCache添加到我的一个Spring托管服务中。我正在使用STS作为我的开发IDE。

这是我做的:

  1. 安装了springcache 1.3.1插件

  2. 为Config.groovy添加了缓存配置:

    grails.spring.disable.aspectj.autoweaving = true
    
    springcache {
      enabled = true
      defaults {
          eternal = false
          diskPersistent = false
      }
      caches {
          tripCache {
              memoryStoreEvictionPolicy = "LRU"
          }
      }
    }
    
  3. 在服务中的测试方法上方添加了@Cacheable注释,如下所示:

      int counter = 0
    
      @Cacheable("testCache")
      String testInc(String x) {
        return (++counter).toString()
      }
    
  4. 现在,我从控制器调用此方法如下:

      def testDashboard() {
        [data:testService.testInc("1")]
      }
    
  5. 并且testInc()总是返回一个新值,即连续调用返回1,2,3等,这让我觉得缓存不起作用。我是否错过了什么并且没有正确启用缓存?

    我试着看看缓存是否正常工作,我把ehcache-2.4.6的源代码挂钩并在CachingAspect的invokeCachedMethod中设置断点,但是当我运行我的app时,上面的方法似乎没有被执行。

    我还试图在缓存中看到“1”的值,看起来它是空的,即键“1”没有存储在缓存中。我在控制器测试方法中添加了以下两行:

          Ehcache c = springcacheService.getOrCreateCache("testCache")
          String x = c.get("1")
    

    请帮忙!

1 个答案:

答案 0 :(得分:1)

基本上,我在这里阅读springcache的文档会误导我: http://gpc.github.com/grails-springcache/docs/guide/3.%20Caching%20Service%20Methods.html

Config.groovy应该grails.spring.disable.aspectj.autoweaving = false而不是true

希望这有助于那些陷入同一问题的人。