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

这是我所做的:

  • 安装了springcache 1.3.1插件
  • 向Config.groovy添加了缓存配置:
    grails.spring.disable.aspectj.autoweaving = true
    
    springcache {
      enabled = true
      defaults {
          eternal = false
          diskPersistent = false
      }
      caches {
          tripCache {
              memoryStoreEvictionPolicy = "LRU"
          }
      }
    }
    
  • 在服务中我的测试方法上方添加了@Cacheable批注,如下所示:
      int counter = 0
    
      @Cacheable("testCache")
      String testInc(String x) {
        return (++counter).toString()
      }
    
  • 现在,我从 Controller 调用此方法,如下所示:
      def testDashboard() {
        [data:testService.testInc("1")]
      }
    
  • testInc()总是向我返回一个新值,即连续调用返回1、2、3等,这使我认为缓存不起作用。我是否错过了某些东西并且没有正确打开缓存?

    我试图查看缓存是否完全正常运行,并在ehching-2.4.6的源代码和CachingAspect的invokeCachedMethod中的设置断点处进行了挂钩,但是当我运行我的应用程序时,上述方法似乎未执行。

    我还尝试在缓存中查看“1”的值,并且看起来它为空,即键“1”没有存储在缓存中。我在 Controller 测试方法中添加了以下两行:
          Ehcache c = springcacheService.getOrCreateCache("testCache")
          String x = c.get("1")
    

    请帮忙!

    最佳答案

    基本上,我被这里的springcache文档误导了:
    http://gpc.github.com/grails-springcache/docs/guide/3.%20Caching%20Service%20Methods.html
    Config.groovy应该具有grails.spring.disable.aspectj.autoweaving = falsetrue istead。

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

    09-27 02:32