我正在寻找一种方法来缓存 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
}
}
Run Code Online (Sandbox Code Playgroud)
我在控制器中的方法:
@Cacheable('inlinecache')
def inlineCache() {
return new Date()
}
Run Code Online (Sandbox Code Playgroud)
我总是能得到实际的日期。我预计该值会持续 30 秒。我究竟做错了什么?
最好的问候,彼得
你如何调用你的inlineCache方法?
如果您从同一个类中调用它,您实际上需要从 Spring 应用程序上下文获取对该服务的引用,并通过该引用调用该方法,而不是直接调用它。这样做的原因是因为 Spring 需要拦截您的方法调用,如果您直接从同一个类中调用该方法,它将无法拦截您的方法调用。
更新:
如果您想从同一服务中调用缓存的方法,您需要执行以下操作:
class MyService {
String myMethod(String argument) {
return grailsApplication.mainContext.myService.myMethodCacheable(argument);
}
@Cacheable(value="myCacheName")
String myMethodCacheable(String argument) {
return ""
}
}
Run Code Online (Sandbox Code Playgroud)
因此,只需从 spring 应用程序上下文myMethod获取引用并委托给其中的实现即可。这意味着我可以从内部调用并从缓存中取回值(如果存在)。MyServicemyMethodCacheable()myMethodMyService
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |