我有一个类,该类的方法会定期使用@Scheduled
注释进行调用。该方法对给定的属性集执行一些批量操作。
如果没有设置属性,则不需要调度的方法调用或实例化的类。因此,我添加了这个SpEL
表达式来检查是否设置了属性:
@Service
@ConditionalOnExpression("#(T(java.util.Map)('${myproperties.people:{:}}')).size() > 0")
public class PeopleService { ... }
application.yml
中的示例值可以是:
myproperties:
people:
uuid1:
name: Mark
age: 32
uuid2:
name: Jeff
age: 36
不幸的是,我收到此错误消息:
Caused by: org.springframework.expression.spel.SpelParseException: Expression [#(T(java.util.Map)('{:}')).size() > 0] @1: EL1043E: Unexpected token. Expected 'identifier' but was 'lparen(()'
请注意,我想出了{:}
来作为空白地图,这里是默认值:https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-inline-maps
如果使用此SpEL,则会出现以下错误:"#(T(java.util.Map)(${myproperties.people:})).size() > 0"
Caused by: org.springframework.expression.spel.SpelParseException: Expression [#(T(java.util.Map)()).size() > 0] @1: EL1043E: Unexpected token. Expected 'identifier' but was 'lparen(()'
完成此操作的正确方法是什么?