我正在尝试将Redis与Spring的@Cacheable
一起使用,但需要根据Spring Boot样式的应用程序属性有条件地打开或关闭缓存。我的第一次尝试似乎不起作用。
application.properties文件:
auth.token-cache-enabled=false
属性类:
@Component
@ConfigurationProperties(prefix = "auth")
public class AuthProperties {
public boolean tokenCacheEnabled;
...
}
服务方法注释:
@Cacheable(key = "#token", condition = "@authProperties.tokenCacheEnabled()")
结果:
org.springframework.expression.spel.SpelEvaluationException: EL1057E:(pos 1): No bean resolver registered in the context to resolve access to bean 'authProperties' at org.springframework.expression.spel.ast.BeanReference.getValueInternal(BeanReference.java:48)
有没有人知道问题是什么,或者是否有另一种方法来实现这个目标?
答案 0 :(得分:2)
我找到了一种方法可以在我的情况下完成这项工作,但我也找到了一个错误票据,我认为这是同一个问题:https://jira.spring.io/browse/SPR-13812
我的解决方法是@Inject
我的AuthProperties
进入包含我要缓存的方法的服务。接下来,我将方法的缓存条件更改为:
@Cacheable(key = "#token", condition = "#root.target.authProperties.tokenCacheEnabled")
答案 1 :(得分:0)
您可以将 tokenCacheEnabled
作为输入传递给方法并使用 condition ="#tokenCacheEnabled == true"