Spring Boot升级至6+版本:HttpComponentsClientHttpRequestFactory超时配置迁移问题
Spring 6+ 下 HttpComponentsClientHttpRequestFactory 超时配置迁移方案
在Spring 6+版本中,HttpComponentsClientHttpRequestFactory 不再直接提供setReadTimeout、setConnectTimeout这类顶层配置方法——因为它底层依赖的HttpClient版本升级到了5.x,需要通过构建自定义的HttpClient实例来配置超时参数。
你需要通过RequestConfig统一配置各类超时,再将其绑定到HttpClient上,最后传入HttpComponentsClientHttpRequestFactory。具体代码如下:
import org.apache.hc.client5.http.config.RequestConfig; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.HttpClients; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; // 构建超时配置 RequestConfig requestConfig = RequestConfig.custom() .setConnectTimeout(java.time.Duration.ofSeconds(20)) // 对应原setConnectTimeout .setSocketTimeout(java.time.Duration.ofSeconds(20)) // 对应原setReadTimeout(即文档提到的soTimeout) .setConnectionRequestTimeout(java.time.Duration.ofSeconds(20)) // 对应原setConnectionRequestTimeout .build(); // 构建带超时配置的HttpClient CloseableHttpClient httpClient = HttpClients.custom() .setDefaultRequestConfig(requestConfig) .build(); // 创建请求工厂并传入HttpClient HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient); return new RestTemplate(factory);
关键对应关系:
- 原
setConnectTimeout(int)→RequestConfig.Builder.setConnectTimeout(Duration) - 原
setReadTimeout(int)→RequestConfig.Builder.setSocketTimeout(Duration)(也就是JavaDoc中提到的soTimeout,对应Socket读取超时) - 原
setConnectionRequestTimeout(int)→RequestConfig.Builder.setConnectionRequestTimeout(Duration)
注意:新版本API使用java.time.Duration指定超时时间,比旧版本的int毫秒值更清晰,也符合现代Java的设计规范。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

