외부설정 2부
앞에서 살펴봤던 외부프로퍼티에 대한 바인딩은 전혀 Type safe 하지 않다.
@Value("${test.projectName}")
String projectName;
@Value("${test.version}")
int version;
@Value("${test.projectNameAndVersion}")
String projectNameAndVersion;
@Value("${~~}") 안에 적는 외부 properties 의 key 값이 정확히 일치 해야 해당 변수에 바인딩 된다.
이러한 경우 대신 자바 bean 스펙을 이용하여 객체에 직접 바인딩을 해줄 수 있다.
해당 prefix 값을 기억하자.
그리고 바인딩 받을 수 있는 class 를 하나 만들자. (프로퍼티 를 주입받기 위해선 Java Bean 스펙 준수)
public class Test {
private String projectName;
private int version;
private String projectNameAndVersion;
//getter ,setter 추가
}
class 이름은 마음대로 정해도 된다.
그리고 해당 class 위에 @ConfigurationProperties
애노테이션을 선언한다.
그리고 아까 기억하고있는 prefix 값을 적어준다.
그리고 해당 class 를 @Component 를 이용하여 Bean으로 등록해주면 끝이다.
전체코드
@Component
@ConfigurationProperties("test")
public class Test {
private String projectName;
private int version;
private String projectNameAndVersion;
//getter ,setter 추가
}
전 | 후 |
---|---|
또한 바인딩시 값에대한 검증도 같이 할 수 있다.
@Validated
애노테이션을 이용한 JSR-303 (@NotNull, ...) 검증 이 가능하다.
spring-boot 2.3 이후 부터는 의존성을 추가해줘야 합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
++추가
앞서 살펴본 properties 설정방법은 Setter 를 사용함으로 immutable 하지 않다.
즉 얼마든지 setter 를 통한 값 변경이 쉽다.
그래서 스프링부트 2.2 이상부터 Setter 를 사용하지않고 properties 를 설정하는 방법을 알아보자.
@ConfigurationProperties(prefix = "jaejoon.test")
@ConstructorBinding // 1
@ToString
public class HostProperties {
private final String host;
private final String name;
public HostProperties(String host, String name) {
this.host = host;
this.name = name;
}
}
1. @ConstructorBinding - 말 그대로 Setter 방식이 아닌 생성자 방식으로 property 를 설정하게 할 수 있다.
해당 설정만 해서는 정상적으로 작동하지 않는다 .
따라서 반드시 @SpringbootApplication 이 붙은 클래스에 @EnableConfigurationProperties 을 설정하여야 한다.
@EnableConfigurationProperties([] class )
만약 properties 클래스를 여러개 정의해야 한다면 value = {...} 와 같이 설정해주면된다.
'Spring > boot' 카테고리의 다른 글
[Spring-boot] Logging (0) | 2021.01.16 |
---|---|
[Spring-boot] Profile 설정 (0) | 2021.01.15 |
[spring-boot] 외부설정(application.properties) (0) | 2021.01.13 |
[Spring-boot] ApplicationEvent 등록 (0) | 2021.01.12 |
[Spring-boot] 자동설정 2부 (0) | 2021.01.12 |