복붙노트

[SPRING] 스프링 부트 조건부 조건부 표현식 다중 특성 점검

SPRING

스프링 부트 조건부 조건부 표현식 다중 특성 점검

Spring Expression Language를 사용하여 2 개의 부울 속성이 참인지 확인하려면 어떻게합니까?

예를 들어, 단일 속성이 참인지 확인하는 구문은 다음과 같습니다.

@ConditionalOnExpression("${property.from.properties.file}")

property1 == true && property2 == false를 확인하기위한 구문은 무엇입니까? 속성에는 잠재적으로 다른 값이있을 수 있습니다.

비슷한 질문에 대한 답 : @ConditionalOnProperty 또는 @ConditionalOnExpression을 사용하는 동안 두 조건을 검사하는 방법은 두 문자열을 연결하고 다음과 같은 검사를 수행합니다.

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

이 구문은 코드를 읽는 사람에게 혼란스러워 보이며 해킹 된 솔루션처럼 보입니다. 값을 연결하지 않고 두 개의 개별 속성을 검사하는 적절한 방법을 찾고 싶습니다.

또한 명확한 대답은 내가 본 것에서 쉽게 찾을 수있는 것이 아닙니다. 그것은 정말 간단한 대답 일 것 같지만 그것은 꽤 어렵다는 것을 증명하고 있습니다.

해결법

  1. ==============================

    1.주석 @ConditionalOnProperty 및 @ConditionalOnExpression은 모두 java.lang.annotation.Repeatable 주석을 가지고 있지 않으므로 여러 속성을 검사하기 위해 여러 주석을 추가 할 수 없습니다.

    주석 @ConditionalOnProperty 및 @ConditionalOnExpression은 모두 java.lang.annotation.Repeatable 주석을 가지고 있지 않으므로 여러 속성을 검사하기 위해 여러 주석을 추가 할 수 없습니다.

    다음 구문을 테스트하고 작동합니다.

    두 가지 속성에 대한 솔루션

    @ConditionalOnExpression("${properties.first.property.enable:true} && ${properties.second.property.startServer:false}")
    

    다음 사항에 유의하십시오.

    다른 값을 가지며 여러 속성으로 확장 할 수있는 여러 속성을 허용합니다.

    두 개 이상의 값을 확인하고 가독성을 유지하려면 평가중인 여러 조건간에 연결 연산자를 사용할 수 있습니다.

    2 개 이상의 속성에 대한 솔루션

    @ConditionalOnExpression("${properties.first.property.enable:true} " +
            "&& ${properties.second.property.enable:true} " +
            "&& ${properties.third.property.enable:true}")
    

    단점은 @ConditionalOnProperty 주석을 사용할 때와 마찬가지로 matchIfMissing 인수를 사용할 수 없으므로 모든 프로파일 / 환경에 대해 .properties 또는 YAML 파일에 속성이 있는지 확인해야하거나 기본값

  2. ==============================

    2.내가 기억하기로는, 다음과 같은 표현을 사용할 수 있습니다.

    내가 기억하기로는, 다음과 같은 표현을 사용할 수 있습니다.

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

    더 읽을 거리 여기 링크가 있습니다

    그것이 도움이된다면, 제발 혼란스러워 질 수 있도록 의견을 말하십시오.

  3. from https://stackoverflow.com/questions/40477251/spring-boot-spel-conditionalonexpression-check-multiple-properties by cc-by-sa and MIT license