在我的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的通用超时设置?
1条答案
按热度按时间mm9b1k5b1#
我最近遇到了这个问题,有两个版本的restemplate,一个用于“短超时”,一个用于“长超时”。我在这里引用了。
restemplate的设计初衷是使用预先配置的超时来构建,并且在初始化之后这些超时保持不变。如果您使用apachehttpclient,那么可以为每个请求设置requestconfig,我认为这是正确的设计。