본 글은 백기선님의 스프링부트 개념과 활용강좌를 수강하며 정리한 내용입니다.
application.properties에 등록되어있는 프로퍼티값을 오버라이드하는 방법을 소개한다.
name = "Minsik"
이 등록되어 있다고 하면
간단한 방법으로 커맨드라인을 통해 값을 전달할 수 있다.
java -jar target/spring-boot-outer-setting-1.0-SNAPSHOT.jar --name=ecoveloper
이렇게 커맨드라인을 통해 설정값을 전달할 경우, application.properties에 기재되어 있는 내용보다 우선하여 적용된다.
프로퍼티에 기재한 내용을 클래스 객체에 바인딩해 빈객체로 등록하는 방법을 알아본다.
Properties 클래스를 메타정보로 등록하기 위한 디펜던시를 등록해 주어야 한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId >
<optional>true</optional>
</dependency>
application.properties에 프로퍼티를 다음과 같이 등록했다고 가정
name = "Minsik"
sample.name = ${name}
sample.age = 20
sample.durationUnit = 25
해당 프로퍼티와 매핑될 클래스 객체 생성
@ConfigurationProperties을 활용해 해당 객체를 프로퍼티의 매핑할 key값을 일치시켜준 후, 동일한 변수를 생성한다. 또한 Getter, Setter함수 또한 정의해 주어야 한다. 이 예제에서는 Lombok의 @Data어노테이션을 활용해 생성하였다.
@Data
@Component
@Validated
@ConfigurationProperties("sample")
public class SampleProperties {
private int age;
@NotEmpty
private String name;
@DurationUnit(ChronoUnit.SECONDS) // Duration 객체로 컨버젼
private Duration sessionTimeout = Duration.ofSeconds(30);
}
위와같이 설정하면, 해당 클래스에 프로퍼티에 등록한 내용이 바인딩되어 Autowired로 주입 빈객체를 등록해 활용할 수 있다. 이때 특정 값에 대한 Validation을 체크할 수 있는 기능을 제공하는 어노테이션이 @Validated이다. 해당 어노테이션을 입력한 후, 원하는 멤버필드 변수에 원하는 설정을 해줄 수 있는데 본 예제에서는 @NotEmpty어노테이션을 활용해 name이라는 변수에 항상 특정 값이 입력되어야 함을 명시하고 있다.