Мне нужно проверить два условия ('AND' (оба условия должны быть выполнены)) на yml-файле при создании компонента. Как это сделать, поскольку @ConditionalOnProperty поддерживает только одну конфигурацию свойств.Как проверить два условия при использовании @ConditionalOnProperty или @ConditionalOnExpression
ответ
Вас может заинтересовать абстрактным классом 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
Решена проблема с использованием @ConditionalOnExpression для двух свойств вместе.
@ConditionalOnExpression("'${com.property1}${com.property2}'=='value1value2'")
В качестве значения свойства в конфигурации указано ниже.
недвижимости 1 Имя - com.property1
Value - value1
недвижимости 2 Имя - com.property2
Value - value2
Использование @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 {
Так как с самого начала @ConditionalOnProperty можно было проверить более одного свойства. Атрибут name/value - это массив.
@Configuration
@ConditionalOnProperty({ "property1", "property2" })
protected static class MultiplePropertiesRequiredConfiguration {
@Bean
public String foo() {
return "foo";
}
}
Для простых булевых свойств с проверкой AND вам не требуется @ConditionalOnExpression.
Что относительно '' $ {com.property1} == 'value1' и $ {com.property2} == 'value2' "'? – Navrocky