Springboot yaml 파일에 List 세팅하기
yaml property에 list 형식의 데이터를 세팅해줘야 되는 경우가 있다. 이런 경우 두 가지 방식이 있는데, 먼저 아래와 같이 "- "(dash and space) 문법을 활용하면 자바에서 Collection 필드에 주입할 수 있다.
my:
servers:
- dev.example.com
- another.example.com
그러면 자바 코드에서는 아래와 같이 Collection 필드에 주입된다. dash 뒤에 공백을 한 칸 줘야하는 것을 꼭 잊지말자.@ConfigurationProperty 말고 @Value를 사용할 수도 있는데, @ConfigurationProperty는 bulk injection이 되므로 데이터가 계층 구조일때 편의성이 있다. 반면 단일 필드를 사용할때는 @value가 더 간편한 경우도 있다. 이 밖에 여러 자잘한 차이들이 있긴하나 중요한 내용은 아닌 것 같으므로 궁금하면 자세히 설명해둔 참조글을 읽어보자.
@ConfigurationProperties("my")
public class Config {
private Set<String> servers;
//getter and setter
}
또는 String 배열로 바인딩 하는 방법도 있는데, yaml 파일에서 comma로 value를 구분해주면 된다.
my:
servers: dev.example.com, another.example.com
자바에서 String 배열 타입에 주입되게 된다.
@ConfigurationProperties("my")
public class Config {
private String[] servers;
//getter and setter
}
개인적으로 dash 구분이 깔끔하고 좋은 것 같다. String 배열을 꼭 써야겠다면 컬렉션으로 받아서 parsing하면 된다.
참조
https://www.baeldung.com/spring-boot-yaml-list
https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
https://developpaper.com/differences-between-springboot-value-and-configuration-properties/