본문 바로가기
Spring

Spring - @ConfigurationPropertiesScan 어노테이션

by devLog by Ronnie's 2022. 1. 19.

들어가며


스프링 프레임워크로 개발을 하다 보면 프로퍼티(properties)파일에 저장된 특정한 설정 값들을 불러와 사용해야 하는 경우가 있다. 이때 @ConfigurationPropertiesScan을 이용하여 사용할 수 있다. 스프링부트 2.2 이전에는 @ConfigurationProperties를 이용해서 사용하였다.

 

 

@ConfigurationProperties 한계점


@ConfigurationProperties을 사용하면 SpringBoot 메인 클래스에 @EnableConfigurationProperties를 추가하여 프로퍼티 클래스들이 늘어날때마다 해당 클래스들을 추가해줘야하는데 이때 해당 클래스들이 많아질 경우에 코드가 상당히 무거워지는 한계가 있다. 이러한 문제점을 해결하기 위해 @ConfigurationPropertiesScan이라는 어노테이션을 스프링부트 2.2 부터 제공해줌.

@Configuration 
@EnableConfigurationProperties({DataSourceProperties.class, InfluxProperties.class, ...}) // 이렇게 계속 길어진다면.. 
public class SpringBootApplication { 
}

 

 

@ConfigurationPropertiesScan 사용방법


@ConfigurationPropertiesScan은 마치 @ComponentScan 방식과 상당히 유사하다. @ConfigurationPropertiesScan 어노테이션은 패키지를 기반으로 @ConfigurationProperties가 등록된 클래스들을 찾아서 값들을 주입하고 빈으로 등록해준다.  @ConfigurationPropertiesScan도 @ComponentScan과 마찬가지로 스캔을 실행할 패키지 또는 클래스를 지정해줄 수 있으며, 별도 값을 지정해주지 않으면 해당 어노테이션이 붙은 패키지와 그 하위의 패키지에 대한 스캔을 진행한다.

 

다음과 같이 스프링부트 메인 클래스에 @ConfigurationPropertiesScan 어노테이션을 붙여준다.

@Configuration 
@ConfigurationPropertiesScan 
public class SpringBootApplication { }

이후 스캔할 클래스에 @ConfigurationProperties 어노테이션을 붙여준다. 이때 @ConstructorBinding 어노테이션을 사용하면 생성자 파라미터 바인딩을 한다. (이 내용은 @ConfigurationProperties 어노테이션에 들어가보면 확인할 수 있다.)

 

댓글