30

在创建 bean 时,我需要检查 YAML 属性文件是否满足两个条件。我该怎么做,因为@ConditionalOnProperty注释只支持一个属性?

4

4 回答 4

32

因为从一开始@ConditionalOnProperty就可以检查多个属性。名称/值属性是一个数组。

@Configuration
@ConditionalOnProperty({ "property1", "property2" })
protected static class MultiplePropertiesRequiredConfiguration {

    @Bean
    public String foo() {
        return "foo";
    }

}

对于带有 AND 检查的简单布尔属性,您不需要@ConditionalOnExpression.

于 2017-08-23T06:01:43.873 回答
29

使用@ConditionalOnExpression此处描述的注释和 SpEL 表达式http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html

例子:

@Controller
@ConditionalOnExpression("${controller.enabled} and ${some.value} > 10")
public class WebController {
于 2016-10-06T08:49:33.847 回答
8

您可能对AllNestedConditionsSpring Boot 1.3.0 中引入的抽象类感兴趣。这允许您创建复合条件,其中您定义的所有条件必须在@Bean您的类初始化之前应用@Configuration

public class ThisPropertyAndThatProperty extends AllNestedConditions {

    @ConditionalOnProperty("this.property")
    @Bean
    public ThisPropertyBean thisProperty() {
    }

    @ConditionalOnProperty("that.property")
    @Bean
    public ThatPropertyBean thatProperty() {
    }

}

然后你可以这样注释你的@Configuration

@Conditional({ThisPropertyAndThatProperty.class}
@Configuration
于 2016-03-15T17:04:16.690 回答
-4

通过同时对两个属性使用 @ConditionalOnExpression 解决了该问题。

@ConditionalOnExpression("'${com.property1}${com.property2}'=='value1value2'")

其中配置中的属性值如下。

属性 1 名称 -com.property1 值 -value1

属性 2 名称 -com.property2 值 -value2

于 2016-03-15T20:58:50.117 回答