【问题标题】:setting timeout using @ConfigurationProperties in SpringBoot在 Spring Boot 中使用 @ConfigurationProperties 设置超时
【发布时间】:2019-12-28 21:46:18
【问题描述】:

我正在查看一个为休息操作配置专用 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

【问题讨论】:

  • @ThomasAndolf - 我无法关联哪个 bean 具有属性 connection-request-timeout、connect-timeout、read-timeout 以便 ConfigurationProperties 注释将其映射到该值。根据我的理解,属性名称应该与 bean 属性完全匹配。我在这里错过了什么?

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


【解决方案1】:

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

source code中可以看到有3个参数。

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

这些是参数映射到使用的那些

@ConfigurationProperties(prefix = "httpProperties")

这不是设置这些参数的最常用方法。但是有多种方法可以设置这些,正如这里指出的那样。

RestTemplate timeout examples

【讨论】:

    【解决方案2】:

    属性是设置HttpComponentsClientHttpRequestFactory类的属性connectionRequestTimeOut、connectTimeOut和readTimeOut。映射是使用将 kebab 案例属性名称映射到 bean 属性的 ConfigurationProperties 注释完成的。

    HttpComponentsClientHttpRequestFactory 文档:

    HttpComponentsClientHttpRequestFactory

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 2016-08-15
      • 1970-01-01
      • 2017-11-06
      • 2017-05-06
      • 1970-01-01
      • 2015-06-17
      • 2018-02-07
      • 2016-07-24
      相关资源
      最近更新 更多