반응형
@ConfigurationProperties
*.properties , *.yml 파일에 있는 property를 자바 클래스에 값을 가져와서(바인딩) 사용할 수 있게 해주는 어노테이션이다.
ConfigurationProperties 장점
- 외부 설정을 객체로 편리하게 변환해서 사용할 수 있다.
- 외부 설정의 계층을 객체로 편리하게 표현할 수 있다.
- 외부 설정을 타입 안전하게 사용할 수 있다. (타입 오류시 컴파일 오류로 확인할 수 있음)
- (Bean Validation) 검증기를 적용할 수 있다.
사용법
*.properties, *.yml 파일의 설정 값을 @Value 을 사용하여 바인딩할 수 있다.
만약 application.properties의 설정 값이 다음과 같다면
my.test.url=test.db.com
my.test.username=hyunlog
my.test.password=12341234
my.test.maxConnection=1
이를 @Value를 사용하여 바인딩하면 다음과 같이 할 수 있다. (여기서는 빈 검증기와 함께 사용하였다.)
(빈 검증기에 대한 부분은 우측 링크 클릭 => 2023.04.06 - [JAVA/Spring] - [Spring] Bean Validation - 유효성 검증 )
@Getter
@ConfigurationProperties("my.test")
@Validated
public class MyTestProperties {
@NotNull // 필수 값
private String url;
@NotNull
private String username;
@NotEmpty
private String password;
@Min(1)
@Max(999)
private int maxConnection; // 최소 1부터 최대 999까지 허용
public MyTestProperties(String url, String username, String password, int maxConnection) {
this.url = url;
this.username = username;
this.password = password;
this.maxConnection = maxConnection;
}
}
- properties 파일의 key값에서 동일하게 시작하는 부분(여기서는 my.datasource)을 @ConfigurationProperties 값에 넣어준다.
- 값을 꺼내 사용하기 위해 Getter를 만들어 준다.
여기 까지가 설정 파일의 값을 바인딩하는 방법이다.
@EnableConfigurationProperties
이제 이것을 사용하기 위해서는
@EnableConfigurationProperties 어노테이션을 사용하여 스프링에게 사용할 @ConfigurationProperties를 값으로 넘겨어야 한다.
넘겨진 해당 클래스는 스프링 Bean 등록되고, 필요한 곳에 주입 받아서 사용할 수 있게 된다.
@EnableConfigurationProperties(MyTestProperties.class)
public class PropertiesConfig {
private final MyTestProperties properties;
public PropertiesConfig(MyTestProperties properties) {
this.properties = properties;
}
@Bean
public MyTestProperties myTestProperties() {
return new MyTestProperties(
properties.getUrl(),
properties.getUsername(),
properties.getPassword(),
properties.getMaxConnection());
}
}
'◼ Spring' 카테고리의 다른 글
[Spring] 스프링부트 엑츄에이터(Actuator)란? (0) | 2023.05.23 |
---|---|
[Spring] @Profile - 각 환경마다 서로 다른 빈 등록 (0) | 2023.05.22 |
[Spring] 스프링에서 YAML(application.yml) 설정 파일 사용 (0) | 2023.05.22 |
[Spring] 배포 환경 별로 설정파일 분리하기 (프로필) (0) | 2023.05.19 |
[Spring] 스프링 AOP 주의사항 - 프록시 내부호출 (0) | 2023.05.17 |