在创建 bean 时,我需要检查 YAML 属性文件是否满足两个条件。我该怎么做,因为@ConditionalOnProperty
注释只支持一个属性?
问问题
40348 次
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
您可能对AllNestedConditions
Spring 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 回答