SpringBoot RestTemplate 设置http请求连接池
在Spring框架中,使用RestTemplate
进行HTTP请求时,为了提高性能和资源利用率,通常会考虑使用连接池来管理底层的HTTP连接。
RestTemplate
本身并不直接支持连接池,但可以通过配置HttpComponentsClientHttpRequestFactory
或者SimpleClientHttpRequestFactory
来实现连接池功能。
Apache的HttpComponentsClientHttpRequestFactory
是一个很好的选择,它基于Apache HttpClient,可以很容易地集成连接池功能。
1. 加依赖
确保你的项目中包含了Apache HttpClient的依赖。如果你使用Maven,可以在pom.xml
中添加如下依赖:
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version>
</dependency>
2. 配置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 {@Beanpublic 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);}
}