스프링/스프링부트
@Value - 외부 설정 사용
chanhee01
2023. 9. 30. 21:05
스프링이 지원하는 외부 설정 조회 방법들
- Environment
- @Value - 값 주입
- @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에 대한 내용이다.