Условно создайте бин, если Карта свойств не пуста с помощью SpEL - PullRequest
1 голос
/ 10 апреля 2019

У меня есть класс с методом, который периодически вызывается с аннотацией @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(()'

Как правильно это сделать?

...