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.classSetter메서드 또는 Constructor가 필요하다.
  • 바인딩할 변수의 이름과 yaml 파일에 있는 이름이 매치해야한다. (케밥표기법, 소문자 가능)
  • @Value와는 다르게 SpEl은 사용이 불가하다.
  • @Component로 스프링이 관리하게 해야한다