@CacheEvict值人口

问题描述 投票:0回答:0

这是设置

应用程序.properties

Property.cache = name1,name2,...,nameN

缓存管理器.java

[...]
@Scheduler(time_of_schedule)
@CacheEvict(value="#'${property.cache}.split()'")
void dueCache(){
    log.info("cache clean");
}
[...]

问题是 @CacheEvict value 抛出

nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'property.cache'.split(',')' in value "#{'${property.cache'.split(',')}"
这是因为 value 是一个
String[]
通常这将与
String
属性一起使用。 有什么办法可以用 SpEL 做到吗?

我尝试了4种方式:

  1. @CacheEvict(value = "#{'${property.cache}'.split(',')}", allEntries = true)
  2. @CacheEvict(value = "#{T(java.util.Arrays).asList(#root.getProperty('property.cache').split(','))}", allEntries = true)
  3. @CacheEvict(value = {"cache1","cache2"}, allEntries = true)
  4. @CacheEvict(value = "cache1", allEntries = true)

如果 value

String value()
但 value 定义为
String[] value()
,则选项 1 和 2 将起作用。 选项 3 和 4 有效,但如果有使用属性的方法,写
value = {"cache1","cache2",.....,"cachen"}
是不合理的。

java spring-boot caching spring-el spring-framework-beans
© www.soinside.com 2019 - 2024. All rights reserved.