반응형
SpringBoot application.yml 설정에 따라 빈을 동적으로 등록/제외해야 하는 경우 @ConditionalOnProperty 어노테이션을 사용해 간단히 처리 할 수 있다.
예를 들어 아래와 같이 application.yaml있고, 'sample.enable' 가 true일 경우만 특정 빈을 생성해야 하는 경우 아래 예시와 같이 설정을 한다.
아래와 같이 선언하게 되면 sample.enable이 true인 경우 SampleProp빈이 Spring Context에 등록이 된다.
@Bean
@ConditionalOnProperty(value = "sample.enable", havingValue = "true", matchIfMissing = false)
public SampleProp sampleProp() throws Exception {
return new SampleProp();
}
@ConditionalOnPropertyr 의 각 속성은
- value : 체크 할 application.yml 의 항목
- havingValue: 비교 할 값, application.yaml 해당 항목의 값이 이 값과 동일하면 빈 생성
- matchIfMissing: application.yml에 해당 항목이 없을 경우 빈 생성을 할 것인지(false인 경우 해당 항목 없으면 생성안함)
추가적으로 Spring Boot에서 자동 설정이 적용되는 조건이나 시점 등에 따라 다양한 어노테이션을 아래와 같이 지원하고 있다.
조건 어노테이션 | 적용 조건 |
@ConditionalOnBean | 해당 Bean 이나 이름이 미리 Bean 팩토리에 포함되어 있는 경우 |
@ConditionalOnClass | 해당 클래스가 classpath에 있는 경우 |
@ConditionalOnCloudPlatform | 해당 클라우드 플랫폼이 활용 상태인 경우 |
@ConditionalOnExpression | SpEL에 의존하는 조건인 경우 |
@ConditionalOnJava | JVM 버전이 일치하는 경우 |
@ConditionalOnJndi | JNDI가 사용 가능하고 특정 위치에 있는 경우 |
@ConditionalOnMissingBean | 해당 Bean 이나 이름이 미리 Bean 팩토리에 포함되어 있지 않은 경우 |
@ConditionalOnMissingClass | 해당 클래스가 classpath에 없는 경우 |
@ConditionalOnNotWebApplication | 웹 애플리케이션이 아닌 경우 |
@ConditionalOnProperty | 특정 프로퍼티가 지정한 값을 갖는 경우 |
@ConditionalOnResource | 특정 Resource가 classpath에 있는 경우 |
@ConditionalOnSingleCandidate | 지정한 Bean이 이미 Bean 팩토리에 포함되어 있고 단일 후보자로 지정 가능한 경우 |
@ConditionalOnWebApplication | 웹 애플리케이션인 경우 |
아래는 자동 설정을 위한 순서 어노테이션이다.
순서 어노테이션 | 설명 |
@AutoConfigureAfter | 지정한 특정 자동 설정 클래스들이 적용된 후에 해당 자동 설정을 적용 |
@AutoConfigureBefore | 지정한 특정 자동 설정 클래스들이 적용되기 전에 해당 자동 설정을 적용 |
@AutoConfigureOrder | 자동 설정 순서 지정을 위한 Spring Framework @Order의 변형 어노테이션 (기존 설정 클래스에는 영향을 주지 않고 자동 설정 클래스들 간의 순서만 지정) |
출처: https://freestrokes.tistory.com/107 [FREESTROKES DEVLOG]
반응형
'개발 > SpringBoot' 카테고리의 다른 글
addViewControllers()로 불필요 Controller 로직 제거 (0) | 2022.01.10 |
---|---|
SpringBoot Multi Servlet 추가 MVC설정 분리 테스트 (0) | 2022.01.04 |
SpringBoot application.yml 리스트, 객체로 불러오기(@ConfigurationProperties) (0) | 2021.12.09 |
SpringBoot 외장Tomcat과 SpringBootServletInitializer (1) | 2021.12.09 |
Jacoco 동적 분석 테스트 및 Jenkins 연동 (0) | 2021.12.08 |
댓글