Spring Expression Language в коде и тестах
Прошу подсказать по использованию SpEL-выражений в коде и тестах. У меня в конфигурации некоторые Bean'ы создаются по условию, в зависимости от конфигурации. Использую @ConditionalOnExpression, например в таком формате
@ConditionalOnExpression(value = "${my.property.enable} == true")
Это работает в коде без проблем. В зависимости от того, какое значение свойства выставлено. Однако, когда я пытаюсь поднять контекст приложения в тестах, то получаю исключение
java.lang.IllegalStateException: Error processing condition on ru.my.package.MyConfigurationClass.jacksonMessageConverter
...
Caused by: org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'lcurly({)'
...
Caused by: org.springframework.expression.spel.SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'lcurly({)'
В документации (https://docs.spring.io/spring-framework/docs/5.2.9.RELEASE/spring-framework-reference/core.html#expressions) указан другой способ использования SpEL в аннотациях к Bean'ам. Если исходить из этого, то моё выражение должно иметь следующий вид
@ConditionalOnExpression(value = "#{ systemProperties['my.property.enable'] == true }")
В таком виде тесты не падают, однако в основном коде такое выражение почему-то не работает (всегда возвращает false)
Ответы (1 шт):
Нашёл решение, используя другую аннотацию, которая в данном случае подходит лучше
@ConditionalOnProperty(name = "my.property.enable", matchIfMissing = CONSTANT_VALUE)
но это не решает основной вопрос по синтаксису @ConditionalOnExpression