2016-03-15 6 views
3

Мне нужно проверить два условия ('AND' (оба условия должны быть выполнены)) на yml-файле при создании компонента. Как это сделать, поскольку @ConditionalOnProperty поддерживает только одну конфигурацию свойств.Как проверить два условия при использовании @ConditionalOnProperty или @ConditionalOnExpression

ответ

3

Вас может заинтересовать абстрактным классом 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 
0

Решена проблема с использованием @ConditionalOnExpression для двух свойств вместе.

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

В качестве значения свойства в конфигурации указано ниже.

недвижимости 1 Имя - com.property1 Value - value1

недвижимости 2 Имя - com.property2 Value - value2

+2

Что относительно '' $ {com.property1} == 'value1' и $ {com.property2} == 'value2' "'? – Navrocky

4

Так как с самого начала @ConditionalOnProperty можно было проверить более одного свойства. Атрибут name/value - это массив.

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

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

} 

Для простых булевых свойств с проверкой AND вам не требуется @ConditionalOnExpression.

Смежные вопросы