【问题标题】:Override restTemplate timeout settings for certain URLs覆盖某些 URL 的 restTemplate 超时设置
【发布时间】:2020-12-23 13:22:03
【问题描述】:

在我的 spring-boot (2.4.0) 应用程序中,我设置了一个连接池和传出 HTTP 请求的超时时间(30 秒):

@Bean
public RequestConfig requestConfig() {
    return RequestConfig.custom()
            .setConnectionRequestTimeout(30000)
            .setConnectTimeout(30000)
            .setSocketTimeout(30000)
            .build();
}

@Bean
public CloseableHttpClient httpClient(PoolingHttpClientConnectionManager poolingHttpClientConnectionManager,
                                      RequestConfig requestConfig) {
    return HttpClientBuilder
            .create()
            .setConnectionManager(poolingHttpClientConnectionManager)
            .setDefaultRequestConfig(requestConfig)
            .build();
}

@Bean
public RestTemplate restTemplate(HttpClient httpClient) {
    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
    requestFactory.setHttpClient(httpClient);
    return new RestTemplate(requestFactory);
}

我在我的网关类中自动装配 restTemplate bean 并使用这个 restTemplate.exchange(...) 来执行 HTTP 请求。超时本身工作正常,适用于所有传出请求。

但对于某些 URL,我需要将超时设置为 5 秒。

有没有办法覆盖某些 URL 的通用超时设置?

【问题讨论】:

    标签: java spring spring-boot connection-pooling resttemplate


    【解决方案1】:

    我最近遇到了这个问题,有两个版本的RestTemplate,一个用于“短超时”,一个用于“长超时”See here.

    RestTemplate 真正设计为使用预配置的超时来构建,并且这些超时在初始化后保持不变。如果您使用 Apache HttpClient,那么是的,您可以为每个请求设置一个 RequestConfig,我认为这是正确的设计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      • 2020-11-14
      • 2015-01-26
      • 2014-08-22
      • 2018-06-29
      • 2019-06-05
      • 1970-01-01
      相关资源
      最近更新 更多