是否可以在@Cacheable注释的除外表达式中使用spring属性占位符?我有一个我想要缓存的服务方法,除非返回的结果小于@PropertySource(“classpath:application.properties”)中指定的属性minCacheCalc的值。
这是我要缓存的服务类方法:
@Service
class CalculationService {
// @Cacheable(cacheNames="calculations", unless="#result < 10") // works fine hardcoded
@Cacheable(cacheNames="calculations", unless="#result < ${minCacheCalc}")
public Integer calculate(Integer i) {
System.out.println("calculate(" + i + ")");
return i * i - i;
}
}
调用此方法会抛出错误:
SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'lcurly({)'
我尝试了很多语法变体,但我似乎无法找到它。
有没有办法在@ Cacheable的unless
参数中引用属性?
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以这样实现:
private int minCacheCalc;
public CalculationService(@Value("${minCacheCalc}") int minCacheCalc) {
this.minCacheCalc = minCacheCalc;
}
public int getMinCacheCalc() {
return this.minCacheCalc;
}
@Cacheable(cacheNames="calculations", unless="#result < #root.target.minCacheCalc")