【发布时间】:2014-09-25 12:55:24
【问题描述】:
如果我为没有任何参数的方法定义 ehcache。
但在我的用例中,我需要通过它的键来访问我构建的缓存。
所以请为我提供更好的分配密钥的方法。
以下是我的代码:
@Override
@Cacheable(value = "cacheName", key = "cacheKey")
public List<String> getCacheMethod() throws Exception{
附:当我尝试从其他地方访问此方法时出现以下错误。
org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): 在“org.springframework.cache.interceptor.CacheExpressionRootObject”类型的对象上找不到字段或属性“cacheKey”
【问题讨论】:
-
好吧,你的方法签名中没有参数,所以即使
key="cacheKey"是一个有效的SpEL(it isn't)它也不会工作,因为没有这样的范围。很难说出您希望实现的目标,因为@Cacheable不是这样工作的 - 它确实需要方法参数用作键,否则缓存将具有一个项目的容量。 -
您使用@Cacheable 注释是绝对正确的,当我尝试以编程方式访问缓存时,它会返回正确的对象,并且如果我尝试从同一个类访问它工作正常,但是当我尝试要从另一个类访问该方法,它会抛出错误“EL1008E:(pos 0): Field or property 'cacheKey' cannot be found on object of type 'org.springframework.cache.interceptor.CacheExpressionRootObject'”
-
不清楚你在问什么(你问题的方向好像换了三遍),听起来可能和这个问题有关→stackoverflow.com/q/12115996/1240557?
-
Kryger 你几乎明白了我的要求,我已经通过以编程方式访问缓存解决了代理问题 Cache cache = cacheManager.getCache("cacheName"); if (cache.get("cacheKey") != null) { return (List
) cache.get("cacheKey").get();并且它在同一个类中工作正常,但是当它访问来自不同类的缓存方法时,它会抛出 spring spel 异常 -
您是否尝试过从注释配置中删除
key?根据我的第一条评论,它不正确的原因不止一个。但是,尚不清楚您在上面的评论中包含的 sn-p 中的"cacheKey"字符串的含义是什么,以及您希望它如何与@Cacheable注释相关联。您确定您阅读了文档吗?
标签: java spring ehcache spelevaluationexception