web-dev-qa-db-ja.com

@ConditionalOnPropertyまたは@ConditionalOnExpressionの使用中に2つの条件を確認する方法

Beanの作成中に、YAMLプロパティファイルで2つの条件が満たされていることを確認する必要があります。 @ConditionalOnPropertyアノテーションがサポートするプロパティは1つだけなので、どうすればよいですか?

19
Zenith Kenneth

使用する @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 {
16
Navrocky

@ConditionalOnPropertyの初めから、複数のプロパティをチェックすることが可能でした。 name/value属性は配列です。

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

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

}

ANDチェックを使用した単純なブール型プロパティの場合、@ConditionalOnExpressionは必要ありません。

15
Josh

Spring Boot 1.3.0で導入された AllNestedConditions 抽象クラスに興味があるかもしれません。これにより、@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
6
Patrick Grimard