-
@Value - 외부 설정 사용스프링/스프링부트 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에 대한 내용이다.
'스프링 > 스프링부트' 카테고리의 다른 글
YAML (0) 2023.09.30 @ConfigurationProperties - 외부 설정 사용 (0) 2023.09.30 외부 설정의 우선순위 (0) 2023.09.30 외부 설정 4 - 설정 데이터 (0) 2023.09.30 외부 설정 - 스프링 통합 (0) 2023.09.30