【发布时间】:2019-04-10 11:39:40
【问题描述】:
我有一个类,该类带有一个使用@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(()'
实现此目的的正确方法是什么?
【问题讨论】:
标签: spring spring-boot spring-el