Spring Boot SpEL 조건부 OnExpression 확인 다중 속성
질문:.
Spring Expression Language를 사용하여 2개의 부울 속성이 참인지 확인하려면 어떻게 해야 합니까?
예를 들어 단일 속성이 참인지 확인하려면 다음 구문을 사용합니다.
예
@ConditionalOnExpression("${property.from.properties.file}")
확인을 위한 구문은 무엇입니까?property1 == true && property2 == false
속성의 값이 서로 다를 수 있습니다.
비슷한 질문의 대답:@ConditionalOnProperty 또는 @ConditionalOnExpression을 사용하는 동안 두 조건을 확인하는 방법은 두 문자열을 연결하여 다음과 같은 검사를 수행합니다.
연결 솔루션
@ConditionalOnExpression("'${com.property1}${com.property2}'=='value1value2'")
그 구문은 그 코드를 읽는 누군가에게 혼란스럽게 보이고 그것은 진부한 해결책처럼 보입니다.솔루션이 실패하는 경우도 있습니다.값을 연결하지 않고 두 개의 개별 속성을 확인할 수 있는 적절한 방법을 찾고 싶습니다.
참고: 또한 제가 본 바로는 쉽게 검색할 수 있는 답이 아닙니다.그것은 정말 간단한 답인 것처럼 보이지만 꽤나 이해하기 어려운 것으로 증명되고 있습니다.
주석@ConditionalOnProperty
그리고.@ConditionalOnExpression
둘 다 가지고 있지 않습니다.java.lang.annotation.Repeatable
주석을 사용하면 여러 속성을 확인하기 위해 여러 주석을 추가할 수 없습니다.
다음 구문이 테스트되어 작동합니다.
두 가지 속성에 대한 솔루션
@ConditionalOnExpression("${properties.first.property.enable:true} && ${properties.second.property.startServer:false}")
다음 사항에 유의하십시오.
- 표현식 언어 문에서 속성의 기본값을 나타내려면 콜론 표기법을 사용해야 합니다.
- 각 속성이 별도의 식 언어 블록 ${}에 있습니다.
- && 연산자는 SpEL 블록 외부에서 사용됩니다.
값이 서로 다른 여러 속성을 허용하고 여러 속성으로 확장할 수 있습니다.
두 개 이상의 값을 확인하고 가독성을 유지하려면 평가 중인 다른 조건 간에 연결 연산자를 사용할 수 있습니다.
둘 이상의 속성을 위한 솔루션
@ConditionalOnExpression("${properties.first.property.enable:true} " +
"&& ${properties.second.property.enable:true} " +
"&& ${properties.third.property.enable:true}")
단점은 사용할 때처럼 matchIfMissing 인수를 사용할 수 없다는 것입니다.@ConditionalOnProperty
모든 프로필/환경에 대한 속성이 .properties 또는 YAML 파일에 있는지 확인하거나 기본값에 의존해야 합니다.
제가 기억하는 한, 당신은 다음과 같은 표현을 사용할 수 있습니다.
@ConditionalOnExpression("'${com.property1}'.equals('${com.property2}')")
더 읽어보기 위해 여기 링크가 있습니다.
도움이 되었다면 제 혼란도 해소될 수 있도록 코멘트 부탁드립니다.
부울 속성을 사용하면 약간 혼란스러울 수 있습니다.
@Bean
@ConditionalOnExpression("${config.integration.materializedCollectionDeleteEnabled:true} and ${config.integration.dbTransactionsEnabled:false}")
public DefaultMaterializedCollectionUpdater defaultMaterializedCollectionUpdater(IntegrationConfig integrationConfig, MongoTemplate mongoTemplate) {
return new DefaultMaterializedCollectionUpdater(integrationConfig, mongoTemplate);
}
콩은 제가 다음과 같은 특성을 가지고 있을 때 만들어져야 하는 것처럼 보일 수 있습니다.
config:
integration:
dbTransactionsEnabled: false
materializedCollectionDeleteEnabled: true
은 하만콩만지않지왜습면냐하다 때문에 만들어지지 .${property:value}
는 기본값을 제공하지만 속성이 값을 제공했는지 확인하지 않습니다.속성에 값이 있는지 명시적으로 확인하려면 ==를 사용합니다. 유지할 수 .
@Bean
@ConditionalOnExpression("${config.integration.materializedCollectionDeleteEnabled:true} == true and ${config.integration.dbTransactionsEnabled:false} == false")
public DefaultMaterializedCollectionUpdater defaultMaterializedCollectionUpdater(IntegrationConfig integrationConfig, MongoTemplate mongoTemplate) {
return new DefaultMaterializedCollectionUpdater(integrationConfig, mongoTemplate);
}
디버그 사용 방법org.springframework.expression.spel.standard.Tokenizer
언급URL : https://stackoverflow.com/questions/40477251/spring-boot-spel-conditionalonexpression-check-multiple-properties
'programing' 카테고리의 다른 글
Javascript: 모든 종류의 요청을 취소합니다. (0) | 2023.07.26 |
---|---|
Oracle: 사용자 암호를 만료되지 않도록 설정하는 방법은 무엇입니까? (0) | 2023.07.26 |
이 SQL 문이 작동하지 않는 이유는 무엇입니까?내 MariaDB 서버에 문제가 있습니까? (0) | 2023.07.26 |
Spring Boot이 시작되면 "메소드 이름은 토큰이어야 합니다" 예외가 발생합니다. (0) | 2023.07.26 |
변수가 PD인지 테스트하는 방법.NaT? (0) | 2023.07.26 |