小编典典

Spring @ConditionalOnProperty具有Value =“ value1”或“ value2”

spring-boot

我正在寻找configurationOnProperty可以指定考虑多个值的用法,如下所示

例如: @ConditionalOnProperty(value = "test.configname", havingValue = "value1" or "value2")

要么

我想知道是否可以指定confiugrationOnProperty条件havingValue != "value3"

例如: @ConditionalOnProperty(value = "test.configname", havingValue != "value3")

请让我知道是否有一种方法可以实现上述任何一项spring boot配置。


阅读 800

收藏
2020-05-30

共1个答案

小编典典

Spring Boot提供AnyNestedCondition了一个已创建的条件,该条件将在任何嵌套条件匹配时匹配。当所有嵌套条件或没有嵌套条件分别匹配时,它还提供AllNestedConditionsNoneNestedConditions进行匹配。

对于您要匹配value1或的值的特定情况,value2您可以创建AnyNestedCondition如下所示的代码:

class ConfigNameCondition extends AnyNestedCondition {

    public ConfigNameCondition() {
        super(ConfigurationPhase.PARSE_CONFIGURATION);
    }

    @ConditionalOnProperty(name = "test.configname", value = "value1")
    static class Value1Condition {

    }

    @ConditionalOnProperty(name = "test.configname", value = "value2")
    static class Value2Condition {

    }

}

然后将其与一起使用@Conditional,例如:

@Bean
@Conditional(ConfigNameCondition.class)
public SomeBean someBean() {
    return new SomeBean();
}

如嵌套条件注释的javadoc中所示(链接到上面),嵌套条件可以是任何类型。在这种特殊情况下,它们不必都具有相同的类型。

2020-05-30