복붙노트

[SPRING] @ConfigurationProperties를 @Configuration에 autowire하는 방법은 무엇입니까?

SPRING

@ConfigurationProperties를 @Configuration에 autowire하는 방법은 무엇입니까?

다음과 같이 정의 된 속성 클래스가 있습니다.

@Validated
@ConfigurationProperties(prefix = "plugin.httpclient")
public class HttpClientProperties {
   ...
}

그리고 다음과 같은 설정 클래스 :

@Configuration
@EnableScheduling
public class HttpClientConfiguration {

    private final HttpClientProperties httpClientProperties;

    @Autowired
    public HttpClientConfiguration(HttpClientProperties httpClientProperties) {
        this.httpClientProperties = httpClientProperties;
    }

    ...
}

스프링 부트 응용 프로그램을 시작할 때

Parameter 0 of constructor in x.y.z.config.HttpClientConfiguration required a bean of type 'x.y.z.config.HttpClientProperties' that could not be found.

이것은 유효한 유스 케이스가 아니거나 의존성을 어떻게 선언해야 하는가?

해결법

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

    1.이것은 유효한 유스 케이스이지만 HttpClientProperties는 구성 요소 스캐너에 의해 스캔되지 않기 때문에 선택되지 않습니다. HttpClientProperties에 @Component 주석을 달 수 있습니다.

    이것은 유효한 유스 케이스이지만 HttpClientProperties는 구성 요소 스캐너에 의해 스캔되지 않기 때문에 선택되지 않습니다. HttpClientProperties에 @Component 주석을 달 수 있습니다.

    @Validated
    @Component
    @ConfigurationProperties(prefix = "plugin.httpclient")
    public class HttpClientProperties {
        // ...
    }
    

    (Stephane Nicoll이 언급 한) 또 다른 방법은 Spring 구성 클래스에서 @EnableConfigurationProperties () 주석을 사용하는 것입니다. 예를 들면 다음과 같습니다.

    @EnableConfigurationProperties(HttpClientProperties.class) // This is the recommended way
    @EnableScheduling
    public class HttpClientConfiguration {
        // ...
    }
    

    이것은 스프링 부트 문서에도 설명되어있다.

  2. from https://stackoverflow.com/questions/43797924/how-to-autowire-configurationproperties-into-configuration by cc-by-sa and MIT license