본문 바로가기
개발/SpringBoot

SpringBoot application.yml 리스트, 객체로 불러오기(@ConfigurationProperties)

by 궁즉변 변즉통 통즉구 2021. 12. 9.
반응형

SpringBoot에서 application.yml 내용을 가져와서 사용해야하는 경우 일반적으로 String, Integer이 아닌 List나 객체 형태로 가져오는 방법을 정리해본다.

 

List 불러오기

application.yml에서 아래와 같이 ",'로 구분해서 각 항목에 여러 개의 item을 등록한다. 한줄로 ","로만 구분해서 작성하면 파악하기가 쉽지 않은 경우도 있는데 이럴 때는 구분자는 동일하게 하고 "," 멀티라인으로 작성해도 된다.

간단히 테스트 케이스로 application.yml에 선언한 내용을 출력해본다.

결과는 아래와 같이 잘 가져오고 출력된다.

 

 객체 불러오기

applicaton.yml 설정 내용을 각각 개별적으로 가져오기 보다 여러 개를 하나의 세트형태로 가져와야 하는 경우 객체 형태로 가져와서 사용하는 것이 편리하다. 객체 형태로 가져올 경우 소스상 @Value 어노테이션도 줄어들고 연관관계도 파악 쉬워진다. 객체 형태로 가져 올 경우에는 @ConfigurationProperties 사용하면 된다.

예를 들어, application.yml 설정이 아래와 같고 sample 하위의 내용을 한번에 객체 형태로 가져와서 사용하고 싶을 경우

sample:
  enable: true
  listStr:
    - sample1
    - sample2
    - sample3
  listInt:
    - 1
    - 2
    - 3

아래와 같이 가져올 yml 설정의 구조에 맞는 클래스 파일을 하나 작성한다.

다음으로 빈 설정에서 @ConfigurationProperties 적용하고 prefix를 yml에서 선언한 "sample"로 선언한다.

@Bean
@ConfigurationProperties(prefix = "sample")
public SampleProp sampleProp() throws Exception {
    return new SampleProp();
}

 

간단하게 테스트를 아래와 같이 진행해본다. @Autowired로 위에서 선언한 객체를 주입하고 바로 사용하면 된다.

@Autowired
private SampleProp sampleProp;

@Test
public void testProp(){
    log.info("{}", sampleProp);

    log.info("{}", sampleProp.isEnable());
    sampleProp.getListStr().forEach(str -> {
        log.info("{}", str);
    });
    sampleProp.getListInt().forEach(num -> {
        log.info("{}", num);
    });
}

 

테스트 결과를 보면 yml에서 선언한 내용들이 출력된다.

 

 

반응형

댓글