Spring 에서 프로퍼티 파일에 있는 설정값들을 불러오기 위해선 다양한 방법이 존재하지만
대표적인 방식이 @Value 와 @ConfigurationProperties 어노테이션이다.
|
@Value |
@ConfigurationProperties |
주입 형식 |
단일값 주입 |
N개 주입(여러개 주입 가능) |
RelaxedBinding |
X |
O |
@ConfigurationProperties 어노테이션은 RelaxedBinding 이 적용되므로 보다 유연하게 값을 바인딩할 수 있다.
RelaxedBinding 이란 값이 정확히 일치하지 않아도 유연하게 값을 바인딩 할 수 있게 인식한다.
대표적으로 Camel Case 와 Snake Case 로 설정된 설정값들을 동일한 설정으로 이해하며, 우선순위에 따라
1개의 값으로 설정한다.
@Value 어노테이션
@Value 어노테이션은 프로퍼티 파일에서 단일값을 가져오기 위해 사용된다.
RelaxedBinding 이 적용되지 않으므로 완벽히 일치하는 프로퍼티명을 설정해야한다.
사용하는 방법은 @Value("${property 명}") 형식으로 사용된다.
// application.yml
spring:
datasource:
hikari:
driver-class-name: org.mariadb.jdbc.Driver
jdbc-url: jdbc:mariadb://192.168.56.1:3306/(db명)
username: (username)
password: (password)
// java
@Value("${spring.datasource.hikari.driver-class-name}")
private String driver_class_name;
@Value("${spring.datasource.hikari.jdbc-url}")
private String jdbc_url;
@Value("${spring.datasource.hikari.username}")
private String username;
@Value("${spring.datasource.hikari.password}")
private String password;
@Value 어노테이션의 특징
- 단일값을 주입하기 위해서 사용한다.
- RelaxedBinding 이 적용되지 않으므로 정확한 이름의 property 명을 설정해야한다.
@ConfigurationProperties 어노테이션
@ConfigurationProperties 어노테이션을 사용하면 spring.datasource.hikari 를 prefix 로 가지는 프로퍼티값들을
한번에 주입할 수 있다.
// application.yml
spring:
datasource:
hikari:
driver-class-name: org.mariadb.jdbc.Driver
jdbc-url: jdbc:mariadb://192.168.56.1:3306/(db명)
username: (username)
password: (password)
// java
@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
@ConfigurationProperties 어노테이션을 사용할 때 주의사항은 prefix 로 설정된 프로퍼티값들은
Kebab Case 로 정의되어야 한다. prefix 하위에 존재하는 값들은 RelaxedBinding 에 의해서
Kebab Case, Camel Case, Snake Case 로 작성된 프로퍼티값들은 모두 Camel Case 로 바인딩 된다.