@ConditionalOnExpression не работает, но @Value работает - PullRequest
0 голосов
/ 31 января 2019

Мне нужно включить / отключить @Aspect для класса в приложении Spring (без загрузки).

Версия 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;

При такой конфигурации выражение всегда оценивается как false .

Я попытался указать одно значение "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, и я также могу доказать, что свойство класса aspect правильно читает свойство aspect.enabled .

Try# 3

Я пытался использовать @ ConditionalOnProperty :

@Configuration
@PropertySource(ignoreResourceNotFound = true, value = { "file:${catalina.home}/conf/application.properties" })
@ConditionalOnProperty(prefix="aspect", name="enabled", havingValue = "true")

но ничего, всегда false .

Попробуйте # 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}")

всегда дает true (даже с aspect.enabled=false) и соответственно

@ConditionalOnExpression("${aspect.enabled:false}")

всегда дает false

...