如何在使用@ConditionalOnProperty或@ConditionalOnExpression时检查两个条件

时间:2016-03-15 16:25:51

标签: spring-boot netflix-eureka spring-cloud-netflix

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

4 个答案:

答案 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