在Spring框架中,使用RestTemplate
进行HTTP请求时,为了提高性能和资源利用率,通常会考虑使用连接池来管理底层的HTTP连接。
RestTemplate
本身并不直接支持连接池,但可以通过配置HttpComponentsClientHttpRequestFactory
或者SimpleClientHttpRequestFactory
来实现连接池功能。
Apache的HttpComponentsClientHttpRequestFactory
是一个很好的选择,它基于Apache HttpClient,可以很容易地集成连接池功能。
-
添加依赖
确保你的项目中包含了Apache HttpClient的依赖。如果你使用Maven,可以在
pom.xml
中添加如下依赖:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
- 配置HttpComponentsClientHttpRequestFactory
import org.apache.http.client.config.RequestConfig;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
// 最大连接数
connectionManager.setMaxTotal(100);
// 每个路由默认的并发数
connectionManager.setDefaultMaxPerRoute(10);
RequestConfig requestConfig = RequestConfig.custom()
// 设置连接超时时间(毫秒)
.setConnectTimeout(10_000)
// 设置等待数据超时时间(毫秒)
.setSocketTimeout(30_000)
.build();
CloseableHttpClient httpClient = HttpClients.custom()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
.build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
return new RestTemplate(requestFactory);
}
}
网友评论