스프링/스프링부트

@Value - 외부 설정 사용

chanhee01 2023. 9. 30. 21:05

스프링이 지원하는 외부 설정 조회 방법들

  1. Environment
  2. @Value - 값 주입
  3. @ConfigurationProperties - 타입 안전한 설정 속성

 

 

이전 포스팅에서 외부 설정을 공부하면서 사용한 Environment에는 약간의 단점이 있다. Environment 를 직접 주입받고, env.getProperty(key) 를 통해서 값을 꺼내는 과정을 반복해야 한다는 점이다.

 

따라서 스프링은 @Value를 통해서 외부 설정값을 주입받는 편리한 기능을 제공해준다.

 

 

@Slf4j
@Configuration
public class MyDataSourceValueConfig {

    @Value("${my.datasource.url}")
    private String url;
    @Value("${my.datasource.username}")
    private String username;
    @Value("${my.datasource.password}")
    private String password;
    @Value("${my.datasource.etc.max-connection}")
    private int maxConnection;
    @Value("${my.datasource.etc.timeout}")
    private Duration timeout;
    @Value("${my.datasource.etc.options}")
    private List<String> options;
    
    @Bean
    public MyDataSource myDataSource1() {
        return new MyDataSource(url, username, password, maxConnection, timeout, options);
    }
}

@Value 어노테이션을 사용해서 application.properties에 있는 값들을 가져다 쓸 수 있다.

@Value("${key 값}")을 입력하면 자동으로 매핑해준다.

 

프로젝트를 할 때 AWS 키 값을 @Value 어노테이션으로 가져온 것을 생각해보면 된다.

 

 

@Slf4j
@Configuration
public class MyDataSourceValueConfig {
    @Bean
    public MyDataSource myDataSource2(
            @Value("${my.datasource.url}") String url,
            @Value("${my.datasource.username}") String username,
            @Value("${my.datasource.password}") String password,
            @Value("${my.datasource.etc.max-connection}") int maxConnection,
            @Value("${my.datasource.etc.timeout}") Duration timeout,
            @Value("${my.datasource.etc.options}") List<String> options) {
        return new MyDataSource(url, username, password, maxConnection, timeout, options);
    }
}

파라미터로 @Value를 넘겨줘도 된다.

 

 

@Value 어노테이션은 타입을 자동으로 매핑해준다. int, String 등 어떤 타입이든 알아서 자동으로 설정된다.

 

 

 

기본값

@Value("${my.datasource.etc.max-connection:2}")
private int maxConnection;

key값 뒤에 :value를 붙여주면 default 값이 된다. application에 my.datasource.etc.max-connection이라는 key 값이 없으면 자동으로 2라는 값이 들어가는 것이다.

 

 

 

@Value 어노테이션 방식도 하나하나 외부 설정 정보의 키 값을 입력받고 주입받아와야 하는 부분이 번거로움이 있고, 설정 데이터를 보면 묶음으로 되어있기 때문에 이런 부분을 객체로 변환하는 편리한 기능을 스프링에서 또 지원해준다.

다음 포스팅은 이 기능인 @ConfigurationProperties에 대한 내용이다.