无参数方法上的@Cacheble 注解
@Cacheble annotation on no parameter method
我想在没有参数的方法上添加 @Cacheable
注释。在那种情况下,我使用@Cacheable 如下
@Cacheable(value="usercache", key = "mykey")
public string sayHello(){
return "test"
}
但是,当我调用这个方法时,它没有被执行,并且出现如下异常
org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field 'mykey' cannot be found on object of type 'org.springframework.cache.interceptor.CacheExpressionRootObject' - maybe not public?
求推荐。
似乎 Spring 不允许您为 SPEL
中的缓存键提供静态文本,并且默认情况下不包括方法名称键,因此,您可能会遇到两种使用相同 cacheName
且没有键的方法可能会使用相同键缓存不同结果的情况。
最简单的解决方法是提供方法名称作为键:
@Cacheable(value="usercache", key = "#root.methodName")
public string sayHello(){
return "test"
}
这会将 sayHello
设置为密钥。
如果确实需要静态键,应该在class中定义一个静态变量,然后使用#root.target
:
public static final String MY_KEY = "mykey";
@Cacheable(value="usercache", key = "#root.target.MY_KEY")
public string sayHello(){
return "test"
}
您可以找到 here 您可以在密钥中使用的 SPEL 表达式列表。
尝试在 mykey
周围添加单引号。这是一个 SPEL 表达式,单引号再次使它成为 String
。
@Cacheable(value="usercache", key = "'mykey'")
在键中添加#
@Cacheable(value="usercache", key = "#mykey")
public string sayHello(){
return "test"
}
key参数可以省略。 Spring 然后会将键为 SimpleKey.EMPTY 的值放入缓存中:
@Cacheable("usercache")
或者(除了使用其他解决方案中概述的 SPEL 之外)您始终可以注入 CacheManager
并手动处理它。
我想在没有参数的方法上添加 @Cacheable
注释。在那种情况下,我使用@Cacheable 如下
@Cacheable(value="usercache", key = "mykey")
public string sayHello(){
return "test"
}
但是,当我调用这个方法时,它没有被执行,并且出现如下异常
org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): Property or field 'mykey' cannot be found on object of type 'org.springframework.cache.interceptor.CacheExpressionRootObject' - maybe not public?
求推荐。
似乎 Spring 不允许您为 SPEL
中的缓存键提供静态文本,并且默认情况下不包括方法名称键,因此,您可能会遇到两种使用相同 cacheName
且没有键的方法可能会使用相同键缓存不同结果的情况。
最简单的解决方法是提供方法名称作为键:
@Cacheable(value="usercache", key = "#root.methodName")
public string sayHello(){
return "test"
}
这会将 sayHello
设置为密钥。
如果确实需要静态键,应该在class中定义一个静态变量,然后使用#root.target
:
public static final String MY_KEY = "mykey";
@Cacheable(value="usercache", key = "#root.target.MY_KEY")
public string sayHello(){
return "test"
}
您可以找到 here 您可以在密钥中使用的 SPEL 表达式列表。
尝试在 mykey
周围添加单引号。这是一个 SPEL 表达式,单引号再次使它成为 String
。
@Cacheable(value="usercache", key = "'mykey'")
在键中添加#
@Cacheable(value="usercache", key = "#mykey")
public string sayHello(){
return "test"
}
key参数可以省略。 Spring 然后会将键为 SimpleKey.EMPTY 的值放入缓存中:
@Cacheable("usercache")
或者(除了使用其他解决方案中概述的 SPEL 之外)您始终可以注入 CacheManager
并手动处理它。