在 Spring Boot 中使用@ConfigurationProperties 设置超时

setting timeout using @ConfigurationProperties in SpringBoot

我正在查看为休息操作配置专用 restTemplate 的代码。我看到以下属性

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

我的配置 class 如下所示

@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 引导应用程序级别或每个请求级别?

请帮助我理解基本概念。

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

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

这些属性正在设置 HttpComponentsClientHttpRequestFactory 的属性 connectionRequestTimeOut、connectTimeOut 和 readTimeOut class。映射是使用 ConfigurationProperties 注释完成的,该注释将 kebab case 属性 名称映射到 bean 属性。

HttpComponentsClientHttpRequestFactory 文档:

HttpComponentsClientHttpRequestFactory