web-dev-qa-db-fra.com

Comment vérifier deux conditions lors de l'utilisation de @ConditionalOnProperty ou @ConditionalOnExpression

Je dois vérifier que deux conditions sont remplies sur un fichier de propriétés YAML, lors de la création d'un bean. Comment puis-je faire cela, comme @ConditionalOnProperty l'annotation ne prend en charge qu'une seule propriété?

19
Zenith Kenneth

Utilisation @ConditionalOnExpression annotation et expression SpEL comme décrit ici http://docs.spring.io/spring/docs/current/spring-framework-reference/html/expressions.html .

Exemple:

@Controller
@ConditionalOnExpression("${controller.enabled} and ${some.value} > 10")
public class WebController {
16
Navrocky

Depuis le début de @ConditionalOnProperty il était possible de vérifier plus d'une propriété. L'attribut nom/valeur est un tableau.

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

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

}

Pour les propriétés booléennes simples avec un ET, vous n'avez pas besoin d'un @ConditionalOnExpression.

15
Josh

Vous pourriez être intéressé par la classe abstraite AllNestedConditions introduite dans Spring Boot 1.3.0. Cela vous permet de créer des conditions composites où toutes les conditions que vous définissez doivent s'appliquer avant tout @Bean sont initialisés par votre @Configuration classe.

public class ThisPropertyAndThatProperty extends AllNestedConditions {

    @ConditionalOnProperty("this.property")
    @Bean
    public ThisPropertyBean thisProperty() {
    }

    @ConditionalOnProperty("that.property")
    @Bean
    public ThatPropertyBean thatProperty() {
    }

}

Ensuite, vous pouvez annoter votre @Configuration comme ça:

@Conditional({ThisPropertyAndThatProperty.class}
@Configuration
6
Patrick Grimard