Value와 ConfigurationProperties Annotation

이 글에서 YAML파일에 있는 데이터를 가져오는데 유용하게 사용되는 @Value@ConfigurationProperties에 대해서 다뤄보겠습니다.

@Value

프로퍼티의 키를 사용하여 특정한 값을 호출할 수 있습니다. 주로 단일 값을 가져올 때 사용합니다.

매핑방식

  • @Value("${propertyName.??.??}") : 깊이가 존재하는 키값에 대해 .으로 구분하여 값을 매핑합니다.
  • @Value("${propertyTest}") : 단일 키값을 매핑합니다.
  • @Value("${noKey : default value}") : 키값이 존재하지 않으면 디폴트값이 매핑되도록 설정합니다.
  • @Value("${propertyTestArray}") : 여러 값을 나열할 때는 배열로 매핑합니다.
  • @Value("#{'${propertyTestList}'.split(',')}") : SpEL을 사용하여 ,를 기준으로 List에 매핑합니다.

@ConfigurationProperties

  • List, Map 자료구조로 프로퍼티값을 매핑하는 방식에 주로 사용됩니다.
1
2
3
4
5
6
fruit:
list:
- name : banana
color: yellow
- name: apple
color: red
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Getter
@Setter
@ConfigurationProperties("fruit")
public class FruitProperty {
private List<Map> list;
}
  • 이런 식으로 매핑이 가능하지만 Map이라는 기본 컬렉션을 사용하는 것보다 더 직관적이고, 명확하게 객체를 구성할 수 있게 아래와 같이 별도로 POJO 타입을 생성하고 Map대신 아래 POJO타입을 매핑하는 것이 더 좋습니다.
1
2
3
4
5
6
7
8
9
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class FruitProperty {
private String name;
private String color;
}

Reference

0%