这是设置
应用程序.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种方式:
@CacheEvict(value = "#{'${property.cache}'.split(',')}", allEntries = true)
@CacheEvict(value = "#{T(java.util.Arrays).asList(#root.getProperty('property.cache').split(','))}", allEntries = true)
@CacheEvict(value = {"cache1","cache2"}, allEntries = true)
@CacheEvict(value = "cache1", allEntries = true)
如果 value 是
String value()
但 value 定义为 String[] value()
,则选项 1 和 2 将起作用。
选项 3 和 4 有效,但如果有使用属性的方法,写value = {"cache1","cache2",.....,"cachen"}
是不合理的。