How to check two condition while using @ConditionalOnProperty or @ConditionalOnExpression

后端 未结 4 1354
面向向阳花
面向向阳花 2020-12-14 16:50

I need to check that two conditions are satisfied on a YAML property file, while creating a bean. How do I do that, as the @ConditionalOnProperty annotation sup

相关标签:
4条回答
  • 2020-12-14 17:22

    Use @ConditionalOnExpression annotation and SpEL expression as described here http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html.

    Example:

    @Controller
    @ConditionalOnExpression("${controller.enabled} and ${some.value} > 10")
    public class WebController {
    
    0 讨论(0)
  • 2020-12-14 17:22

    You might be interested in the AllNestedConditions abstract class that was introduced in Spring Boot 1.3.0. This allows you to create composite conditions where all conditions you define must apply before any @Bean are initialized by your @Configuration class.

    public class ThisPropertyAndThatProperty extends AllNestedConditions {
    
        @ConditionalOnProperty("this.property")
        @Bean
        public ThisPropertyBean thisProperty() {
        }
    
        @ConditionalOnProperty("that.property")
        @Bean
        public ThatPropertyBean thatProperty() {
        }
    
    }
    

    Then you can annotate your @Configuration like this:

    @Conditional({ThisPropertyAndThatProperty.class}
    @Configuration
    
    0 讨论(0)
  • 2020-12-14 17:29

    Resolved the issue by using @ConditionalOnExpression for the two properties together.

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

    Wherein property value in configuration is as below.

    Property 1 Name - com.property1 Value - value1

    Property 2 Name - com.property2 Value - value2

    0 讨论(0)
  • 2020-12-14 17:33

    Since from the beginning of @ConditionalOnProperty it was possible to check more than one property. The name / value attribute is an array.

    @Configuration
    @ConditionalOnProperty({ "property1", "property2" })
    protected static class MultiplePropertiesRequiredConfiguration {
    
        @Bean
        public String foo() {
            return "foo";
        }
    
    }
    

    For simple boolean properties with an AND check you don't need a @ConditionalOnExpression.

    0 讨论(0)
提交回复
热议问题