使用应用程序属性的@Cacheable条件

时间:2015-12-23 19:56:37

标签: java spring

我正在尝试将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)

有没有人知道问题是什么,或者是否有另一种方法来实现这个目标?

2 个答案:

答案 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"