我希望在方法上有@Cacheable
注解,但不带参数。
@Cacheable(value="usercache", key = "mykey")
public string sayHello(){
return "test"
}
然而,当我调用这个方法时,它不会被执行,并且会出现如下异常
异常提示:EL 1008 E:(位置0):无法在类型为“org.springframework.cache.interceptor.CacheExpressionRootObject”的对象上找到属性或字段“mykey”-可能不是公共的?
请建议。
5条答案
按热度按时间gev0vcfq1#
Spring似乎不允许您为
SPEL
中该高速缓存键提供静态文本,并且它不包括默认的key上的方法名称,因此,您可能会遇到两个使用相同cacheName
且没有key的方法可能会缓存具有相同key的不同结果的情况。最简单的解决方法是提供方法的名称作为键:
这会将
sayHello
设置为密钥。如果你真的需要一个静态键,你应该在类中定义一个静态变量,并使用
#root.target
:您可以在这里找到可以在密钥中使用的SPEL表达式列表。
hpcdzsge2#
尝试在
mykey
周围添加单引号。这是一个SPEL表达式,单引号使其再次成为String
。ryoqjall3#
你可以省略key参数。Spring会将key为SimpleKey.EMPTY的值放入该高速缓存中:
或者(除了使用其他解决方案中概述的SPEL),您可以始终注入
CacheManager
并手动处理它。nqwrtyyt4#
对我来说问题是键的语法不对
右为关键项目前的需求编号:
q35jwt9p5#
在密钥中添加#