首页 > 解决方案 > Spring @ConditionalOnProperty havingValue = "value1" 或 "value2"

问题描述

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

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

或者

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

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

请让我知道是否有办法在spring boot配置中实现上述任何一项。

标签: javaspringspring-bootjavabeans

解决方案


Spring Boot 提供AnyNestedCondition了一个在任何嵌套条件匹配时都将匹配的条件。当所有嵌套条件或没有嵌套条件分别匹配时,它还提供AllNestedConditionsand NoneNestedConditionsfor 匹配。

对于您想要匹配的值的特定情况,value1或者value2您将创建AnyNestedCondition这样的:

class ConfigNameCondition extends AnyNestedCondition {

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

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

    }

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

    }

}

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

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

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


推荐阅读