복붙노트

[SPRING] 스프링 부트 : @Value 또는 @ConfigurationProperties를 사용하여 yaml에서 목록 읽기

SPRING

스프링 부트 : @Value 또는 @ConfigurationProperties를 사용하여 yaml에서 목록 읽기

yaml 파일 (application.yml)에서 호스트 목록을 읽으려는 경우 파일은 다음과 같습니다.

cors:
    hosts:
        allow: 
            - http://foo1/
            - http://foo2/
            - http://foo3/

(실시 예 1)

사용되는 클래스는 다음과 같은 값을 정의합니다.

@Value("${cors.hosts.allow}")   
List<String> allowedHosts;

그러나 봄이 이것에 관하여 불평하기 때문에 독서는 실패한다 :

이와 같이 파일을 변경할 때 속성을 읽을 수는 있지만 자연스럽게 목록은 있지만 하나의 항목 만 포함합니다.

cors:
    hosts:
        allow: http://foo1, http://foo2, http://foo3

(나는 값을 한 줄로 읽고 ","로 나눌 수 있지만 아직 해결 방법을 원하지는 않는다)

이것은 (비록 내가 snakeyamls 워드 프로세서에 따라 유효하다고 생각하지만) 작동하지 않습니다 :

cors:
    hosts:
        allow: !!seq [ "http://foo1", "http://foo2" ] 

(!! seq를 건너 뛰고 [/]를 사용하는 것 역시 실패 임)

@ConfigurationProperties를 사용하고 Java로 예제를 전송하고 Example1에서 볼 수있는 yaml 파일과 함께 사용한 제안을 읽었습니다.

@Configuration
@EnableWebMvc
@ConfigurationProperties(prefix = "cors.hosts")
public class CorsConfiguration extends WebMvcConfigurerAdapter {
    @NotNull
    public List<String> allow;
...

이 프로그램을 실행하면 다음과 같은 불만이 제기됩니다.

내 CORS 호스트를 구성 할 수있는 다른 방법을 찾고이 Spring Boot 문제를 발견했지만 아직 완료되지 않았기 때문에 솔루션으로 사용할 수 없습니다. 이 모든 것은 스프링 부트 1.3 RC1로 수행됩니다.

해결법

  1. ==============================

    1.쉽습니다. 대답은이 문서와이 문서에도 있습니다.

    쉽습니다. 대답은이 문서와이 문서에도 있습니다.

    그래서, 당신은 이런 yaml을 가지고 있습니다 :

    cors:
        hosts:
            allow: 
                - http://foo1/
                - http://foo2/
                - http://foo3/
    

    그런 다음 먼저 데이터를 바인딩합니다.

    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.stereotype.Component;
    
    import java.util.List;
    
    @Component
    @ConfigurationProperties(prefix="cors.hosts")
    public class AllowedHosts {
        private List<String> HostNames; //You can also bind more type-safe objects
    }
    

    그런 다음 다른 구성 요소에서

    @Autowired
    private AllowedHosts allowedHosts;
    

    그리고 너 끝났어!

  2. ==============================

    2.application.yml에서 쉼표로 구분 된 값을 사용하십시오.

    application.yml에서 쉼표로 구분 된 값을 사용하십시오.

    corsHostsAllow: http://foo1/, http://foo2/, http://foo3/
    

    액세스 용 자바 코드

    @Value("${corsHostsAllow}")    
    String[] corsHostsAllow
    

    나는 시도하고 성공했다;)

  3. ==============================

    3.나는 아래와 같은 속성에서 목록을 읽을 수있었습니다.

    나는 아래와 같은 속성에서 목록을 읽을 수있었습니다.

    속성 -

    cors.hosts.allow[0]=host-0
    cors.hosts.allow[1]=host-1
    

    읽기 속성 -

    @ConfigurationProperties("cors.hosts")
    public class ReadProperties {
        private List<String> allow;
    
        public List<String> getAllow() {
           return allow;
        }
        public void setAllow(List<String> allow) {
            this.allow = allow;
        }
    }
    
  4. from https://stackoverflow.com/questions/33369878/spring-boot-read-list-from-yaml-using-value-or-configurationproperties by cc-by-sa and MIT license