在创建bean时,我需要检查YAML属性文件是否满足两个条件。我怎么做,因为@ConditionalOnProperty
注释只支持一个属性?
答案 0 :(得分:10)
从@ConditionalOnProperty
开始,就可以检查多个属性。 name / value属性是一个数组。
@Configuration
@ConditionalOnProperty({ "property1", "property2" })
protected static class MultiplePropertiesRequiredConfiguration {
@Bean
public String foo() {
return "foo";
}
}
对于带AND检查的简单布尔属性,您不需要@ConditionalOnExpression
。
答案 1 :(得分:8)
使用此处http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html所述的@ConditionalOnExpression
注释和SpEL表达式。
示例:
@Controller
@ConditionalOnExpression("${controller.enabled} and ${some.value} > 10")
public class WebController {
答案 2 :(得分:6)
您可能对Spring Boot 1.3.0中引入的AllNestedConditions
抽象类感兴趣。这允许您创建复合条件,其中您定义的所有条件必须在@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
:
CREATE TABLE [dbo].[Bookmarks] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[carparkId] INT NULL,
[date] DATETIME NULL,
[username] NVARCHAR (50) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC),
FOREIGN KEY ([carparkId]) REFERENCES [dbo].[Carparks] ([id])
答案 3 :(得分:-2)
通过对两个属性一起使用@ConditionalOnExpression解决了这个问题。
@ConditionalOnExpression("'${com.property1}${com.property2}'=='value1value2'")
其中配置中的属性值如下所示。
物业1
姓名 - com.property1
价值 - value1
财产2
姓名 - com.property2
价值 - value2