在SpringBoot中使用@ConfigurationProperties设置超时

时间:2019-12-28 21:46:18

标签: spring-boot apache-httpclient-4.x resttemplate spring-rest

我正在通过一个代码,该代码为rest操作配置专用的restTemplate。我看到以下属性

httpProperties.connection-request-timeout=6100
httpProperties.connect-timeout=6100
httpProperties.read-timeout=6100

我的Config类如下所示

@Bean
@ConfigurationProperties(prefix = "httpProperties")
public HttpComponentsClientHttpRequestFactory webSystemHttpRequestFactory() {

    SSLContext sslContext;
    try {

        SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext);
        HttpClient httpClient = HttpClients.custom().setMaxConnTotal(maxTotalConnection)
                .setMaxConnPerRoute(maxConnectionPerRoute).setSSLSocketFactory(socketFactory).build();
        return  new HttpComponentsClientHttpRequestFactory(httpClient);

    } 
    catch(Exception e) {
    }

    return  new HttpComponentsClientHttpRequestFactory();
}

@Bean(name = "webSystemRestTemplate")
public RestTemplate webSystemRestTemplate() {
    RestTemplate restTemplate = new RestTemplate(webSystemHttpRequestFactory());
    return restTemplate;

}

我可以看到日志

o.a.h.i.c.DefaultManagedHttpClientConnection.setSocketTimeout - http-outgoing-1: set socket timeout to 6100

这是我想了解的内容:

  1. 如何通过@CnfigurationProperties批注将此值设置为哪个属性?

  2. 它是否适用于Spring Boot应用程序级别或每个请求级别?

请帮助我理解基本概念。

注意:使用的Apache http客户端版本为4.5.2

2 个答案:

答案 0 :(得分:0)

HttpComponentsClientHttpRequestFactory.class的源代码中,有一个名为RequestConfig.class的对象。

source code中,您可以看到三个参数。

private final Timeout connectionRequestTimeout;
private final Timeout connectTimeout;
private final Timeout responseTimeout;

这些是参数映射到的参数

@ConfigurationProperties(prefix = "httpProperties")

这不是设置这些参数的最常用方法。但是有多种方法可以设置这些参数。

RestTemplate timeout examples

答案 1 :(得分:0)

这些属性正在设置HttpComponentsClientHttpRequestFactory类的属性connectionRequestTimeOut,connectTimeOut和readTimeOut。使用ConfigurationProperties批注完成映射,该批注将kebab案例属性名称映射到bean属性。

HttpComponentsClientHttpRequestFactory文档:

HttpComponentsClientHttpRequestFactory