본 글은 백기선님의 스프링부트 개념과 활용강좌를 수강하며 정리한 내용입니다.

application.properties에 등록되어있는 프로퍼티값을 오버라이드하는 방법을 소개한다.

name = "Minsik"

이 등록되어 있다고 하면

1. 커맨드라인 아규먼트 활용하기

간단한 방법으로 커맨드라인을 통해 값을 전달할 수 있다.

java -jar target/spring-boot-outer-setting-1.0-SNAPSHOT.jar --name=ecoveloper

이렇게 커맨드라인을 통해 설정값을 전달할 경우, application.properties에 기재되어 있는 내용보다 우선하여 적용된다.


2. 프로퍼티 클래스 생성 및 등록

프로퍼티에 기재한 내용을 클래스 객체에 바인딩해 빈객체로 등록하는 방법을 알아본다.

Properties 클래스를 메타정보로 등록하기 위한 디펜던시를 등록해 주어야 한다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId >
        <optional>true</optional>
    </dependency>

@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이라는 변수에 항상 특정 값이 입력되어야 함을 명시하고 있다.