重写某些URL的resttemplate超时设置

webghufk  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(508)

在我的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 在我的网关类中使用 restTemplate.exchange(...) 执行http请求。超时本身工作正常,并应用于所有传出请求。
但是对于某些URL,我需要将超时设置为5秒。
有没有办法覆盖某些URL的通用超时设置?

mm9b1k5b

mm9b1k5b1#

我最近遇到了这个问题,有两个版本的restemplate,一个用于“短超时”,一个用于“长超时”。我在这里引用了。
restemplate的设计初衷是使用预先配置的超时来构建,并且在初始化之后这些超时保持不变。如果您使用apachehttpclient,那么可以为每个请求设置requestconfig,我认为这是正确的设计。

相关问题