美文网首页Spring技巧
SpringBoot RestTemplate 设置连接池

SpringBoot RestTemplate 设置连接池

作者: 饱饱抓住了灵感 | 来源:发表于2025-02-18 15:07 被阅读0次

在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>
  1. 配置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);
    }
}

相关文章

网友评论

    本文标题:SpringBoot RestTemplate 设置连接池

    本文链接:https://www.haomeiwen.com/subject/skeepjtx.html