Мне нужно включить/отключить @Aspect для класса в приложении Spring (не загрузочном).
Весенняя версия: 4.1.6.RELEASE
У меня есть файл .properties (что мы уже успешно используем в другой точке приложения, например для выбора конфигурационного файла log4j2) со свойством aspect.enabled=true|false, и я попытался использовать аннотацию @ConditionalOnExpression, чтобы включить|отключить его.
Это моя попытка:
файл application.properties:
aspect.enabled=true
Код класса:
@Configuration
@PropertySource(ignoreResourceNotFound = true, value = { "file:${catalina.home}/conf/application.properties" })
@ConditionalOnExpression("'${aspect.enabled}'=='true'")
@Aspect
@Component
public class TimingProfilerProduction {
@Value("${aspect.enabled}")
public String aspect;
В этой конфигурации выражение всегда оценивается как ложный.
Я попытался поставить одно «true», чтобы увидеть, работает ли он таким простым способом:
@Configuration
@PropertySource(ignoreResourceNotFound = true, value = { "file:${catalina.home}/conf/application.properties" })
@ConditionalOnExpression("true")
@Aspect
@Component
public class TimingProfilerProduction {
@Value("${aspect.enabled}")
public String aspect;
Конечно, таким образом @ConditionalOnExpression оценивается как true, и я также могу доказать, что свойство класса аспект правильно считывает свойство аспект.включен.
Попробуйте №3
Я пробовал с @ConditionalOnProperty:
@Configuration
@PropertySource(ignoreResourceNotFound = true, value = { "file:${catalina.home}/conf/application.properties" })
@ConditionalOnProperty(prefix = "aspect", name = "enabled", havingValue = "true")
но ничего, всегда ложный.
Попробуйте №4:
@ConditionalOnExpression("${aspect.enabled}")
или
@ConditionalOnExpression("!${aspect.enabled}")
Выдает ошибку:
Caused by: org.springframework.expression.spel.SpelParseException: EL1041E:(pos 1): After parsing a valid expression, there is still more data in the expression: 'lcurly({)'
Попробуйте № 5 (со значениями по умолчанию):
@ConditionalOnExpression("${aspect.enabled:true}")
всегда выдает истинный (даже с aspect.enabled=false), и соответственно
@ConditionalOnExpression("${aspect.enabled:false}")
всегда дает ложный
Да, @GrzegorzOledzki, я пробовал, но ничего (попробуй №3)
@ConditionalOnProperty(value = "aspect.enabled", matchIfMissing = false, haveValue = "true") вы пробовали так?
@Ermintar прав, проверьте пример здесь
Нет, я не использовал эту точную формулировку, поэтому я обновлю вопрос соответствующим образом. Большое спасибо




Вместо:
@ConditionalOnExpression("'${aspect.enabled}' == 'true'")
Пытаться:
@ConditionalOnExpression("${aspect.enabled} == true")
Вы пробовали
@ConditionalOnProperty?