JAVA/SPRING
YAML 파일을 변수에 매핑하기. (@Value, @ConfigurationProperties)
gracelove91
2020. 3. 15. 11:36
YAML 파일 변수에 매핑하기. (@Value, @ConfigurationProperties)
@Value
application.yml
property:
test:
name: property depth test
propertyTest: test
propertyTestList: a,b,c
ValueTest.class
@SpringBootTest
public class AutoConfigurationApplicationTests {
@Value("${property.test.name}")
private String propertyTestName;
@Value("${propertyTest}")
private String propertyTest;
@Value("${noKey:default value}")
private String defaultValue;
@Value("${propertyTestList}")
private String[] propertyTestArray;
@Value("#{'${propertyTestList}'.split(',')}")
private List<String> propertyTestList;
@Test
void testValue() {
assertEquals("property depth test", propertyTestName);
assertEquals("test", propertyTest);
assertEquals("default value", defaultValue);
assertArrayEquals(new String[]{"a","b","c"}, propertyTestArray);
assertEquals(List.of("a","b","c"), propertyTestList);
}
}
@ConfigurationProperties
application.yml
car:
list:
- name: Porsche911
color: red
- name: K5
color: black
Car.class
public class Car {
private String name;
private String color;
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
'}';
}
public void setName(String name) {
this.name = name;
}
public void setColor(String color) {
this.color = color;
}
}
CarProperty.class
@Component
@ConfigurationProperties("car")
public class CarProperty {
private List<Car> list;
public List<Car> getList() {
return list;
}
public void setList(List<Car> list) {
this.list = list;
}
}
Car.class
,CarProperty.class
에Setter
메서드 또는Constructor
가 필요하다.- 바인딩할 변수의 이름과
yaml
파일에 있는 이름이 매치해야한다. (케밥표기법, 소문자 가능) @Value
와는 다르게SpEl
은 사용이 불가하다.@Component
로 스프링이 관리하게 해야한다