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