如果我为没有任何参数的方法定义了一个ehcache。
但在我的用例中,我需要通过它的密钥访问我构建的缓存。
所以请为我提供更好的方法来分配钥匙。
关注我的代码:
@Override
@Cacheable(value = "cacheName", key = "cacheKey")
public List<String> getCacheMethod() throws Exception{
P.S。当我尝试从其他地方访问此方法时,我收到以下错误。
org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0):字段或属性&#39; cacheKey&#39;无法在类型对象上找到org.springframework.cache.interceptor.CacheExpressionRootObject&#39;
答案 0 :(得分:13)
该方法没有参数,因此没有办法将参数/参数用作默认密钥,并且您不能使用&#34;静态文本&#34;作为密钥,您可以执行以下操作:
声明以下内容
public static final String KEY = "cacheKey";
public
static
和final
然后
@Override
@Cacheable(value = "cacheName", key = "#root.target.KEY")
public List<String> getCacheMethod() throws Exception{
完成
答案 1 :(得分:2)
请查看此spring doc。
键指的是你的方法的参数,你有SpelEvaluationException
,因为cachekey
不在你的方法参数中。
答案 2 :(得分:1)
在简单的情况下,您可以使用更简单的方法:@Cacheable(key = "#root.methodName")
,键将等于带注释的方法名称
答案 3 :(得分:0)
您可以使用密钥中的单引号将其重新设置为String来解决此问题。
@Cacheable(value= CACHE_NAME.PRODUCT_CATLOG, key=" 'products' ")
public List<Product> findAll() {
return StreamSupport.stream(productRepository.findAll().spliterator(),false).collect(Collectors.toList());
}