如果属性图在SpEL中不为空,则有条件创建bean

时间:2019-04-10 11:39:41

标签: spring spring-el

我有一个类,该类的方法会定期使用@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(()'

完成此操作的正确方法是什么?

0 个答案:

没有答案