SpringBoot配置類註解【@ConfigurationProperties和@EnableConfigurationProperties】

@ConfigurationProperties

案例代碼:

@Data
@ConfigurationProperties(prefix = "spring.httpclient")
public class HttpClientProperties {

    private Integer connectTimeOut=1000;

    private Integer socketTimeOut=10000;

    private String agent="agent";

    private Integer maxConnPerRoute=10;

    private Integer maxConnTotal=50;

}

看到這個註解,首先需要想到肯定跟配置文件有關,然後配置文件裏存在以“spring.httpclient”開頭的屬性。
查看配置文件,確實存在這些屬性:

spring.httpclient.connectTimeOut=100
spring.httpclient.socketTimeOut=10000
spring.httpclient.agent=agent
spring.httpclient.maxConnPerRoute=10
spring.httpclient.maxConnTotal=50

@ConfigurationProperties的作用就是將配置文件裏的屬性值映射到被註解的類裏面。

@EnableConfigurationProperties

案例代碼:

@Configuration
//HttpClient.java存在的情況下,才加載HttpClientAutoConfiguration
@ConditionalOnClass(HttpClient.class)
//將HttpClientProperties作爲一個bean注入spring容器中
@EnableConfigurationProperties(HttpClientProperties.class)
public class HttpClientAutoConfiguration {

    @Autowired
    private HttpClientProperties properties;

//    public HttpClientAutoConfiguration(HttpClientProperties properties) {
//        this.properties = properties;
//    }

    @Bean
    //在用戶未定義httpClient這個bean時,才加載
    @ConditionalOnMissingBean
    public HttpClient httpClient() {
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(properties.getConnectTimeOut())
                .setSocketTimeout(properties.getSocketTimeOut()).build();
        HttpClient client= HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setUserAgent(properties.getAgent())
                .setMaxConnPerRoute(properties.getMaxConnPerRoute()).setConnectionReuseStrategy(new NoConnectionReuseStrategy()).build();
        return client;
    }

}

這個註解跟上面的註解很相似,前面多了個Enable。什麼意思呢?如果一個類只是被@ConfigurationProperties註解,而沒有使用@Component,那麼該類其實是沒有被spring容器管理的。上面HttpClientProperties類其實就是沒有被spring管理,它只是完成了跟配置文件的映射。
@EnableConfigurationProperties的作用就是將HttpClientProperties類注入到spring容器中,這樣用的時候就可以直接從spring容器中取出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章