grails中的缓存方法

时间:2015-11-13 07:00:44

标签: grails ehcache

我正在寻找一种方法来缓存Grails中某些方法的返回值。我发现插件ehcache(https://grails.org/plugin/cache-ehcache)看起来非常好。

但我不能让我的榜样上班。我想使用@Cachable表示法。 我在Config.groovy中的配置:

grails{
    cache {
        enabled = true
        ehcache {
            reloadable = false
        }
    }
}

grails.cache.config = {
    cache {
        name 'inlinecache'
        eternal false
        enabled true
        overflowToDisk true
        maxElementsInMemory 10000
        maxElementsOnDisk 10000000
        timeToLiveSeconds 30
    }
}

我在Controller中的方法:

@Cacheable('inlinecache')
def inlineCache() {
    return new Date()
}

我总是得到实际的约会。我希望这个值持续30秒。我做错了什么?

祝你好运, 彼得

1 个答案:

答案 0 :(得分:4)

您如何调用inlineCache方法?

如果您在同一个类中调用它,您实际上需要从Spring应用程序上下文中获取对该服务的引用,并通过该方法调用该方法而不是直接调用它。这样做的原因是Spring需要拦截你的方法调用,如果你直接从同一个类中调用该方法,它就无法实现。

<强>更新

如果您想在同一服务中调用缓存方法,则需要按照以下方式执行操作:

class MyService {
    String myMethod(String argument) {
        return grailsApplication.mainContext.myService.myMethodCacheable(argument);
    }

    @Cacheable(value="myCacheName")
    String myMethodCacheable(String argument) {          
        return ""
    }
}

所以myMethod只是从spring应用程序上下文中获取对MyService的引用,并委托给那里的myMethodCacheable()实现。这意味着我可以在myMethod内调用MyService并从缓存中获取值(如果存在)。