springboot 学习之路 24 (集成httpclient连接池技术)


springboot 集成Httpclient连接池外调webservice接口:

  httpclient : https://www.yiibai.com/httpclient/httpclient-overview.html

集成步骤:

  第一步:下载pom文件:

    

  第二步:修改配置文件:

    

  第三步:配置类:

    

  1 package com.xf.station.config;
  2 
  3 import org.apache.http.client.config.RequestConfig;
  4 import org.apache.http.client.methods.CloseableHttpResponse;
  5 import org.apache.http.client.methods.HttpGet;
  6 import org.apache.http.impl.client.CloseableHttpClient;
  7 import org.apache.http.impl.client.HttpClientBuilder;
  8 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
  9 import org.apache.http.util.EntityUtils;
 10 import org.springframework.beans.factory.annotation.Autowired;
 11 import org.springframework.beans.factory.annotation.Qualifier;
 12 import org.springframework.beans.factory.annotation.Value;
 13 import org.springframework.context.annotation.Bean;
 14 import org.springframework.context.annotation.PropertySource;
 15 import org.springframework.stereotype.Component;
 16 
 17 import java.io.IOException;
 18 
 19 /**
 20  * @author : huhy on 2018/10/22.
 21  * @Project_name:springboot_self_gitlab
 22  * @LOCAL:com.huhy.demo.httpclient
 23  * @description:{todo}
 24  */
 25 @Component
 26 @PropertySource(value = {"classpath:config/httpclient.properties"},encoding = "UTF-8",ignoreResourceNotFound = true)
 27 public class HttpClientConfig {
 28 
 29         @Value("${http.maxTotal}")
 30         private Integer maxTotal;
 31 
 32         @Value("${http.defaultMaxPerRoute}")
 33         private Integer defaultMaxPerRoute;
 34 
 35         @Value("${http.connectTimeout}")
 36         private Integer connectTimeout;
 37 
 38         @Value("${http.connectionRequestTimeout}")
 39         private Integer connectionRequestTimeout;
 40 
 41         @Value("${http.socketTimeout}")
 42         private Integer socketTimeout;
 43 
 44         @Value("${http.staleConnectionCheckEnabled}")
 45         private boolean staleConnectionCheckEnabled;
 46 
 47         /**
 48          * 首先实例化一个连接池管理器,设置最大连接数、并发连接数
 49          * @return
 50          */
 51         @Bean(name = "httpClientConnectionManager")
 52         public PoolingHttpClientConnectionManager getHttpClientConnectionManager(){
 53             PoolingHttpClientConnectionManager httpClientConnectionManager = new PoolingHttpClientConnectionManager();
 54             //最大连接数
 55             httpClientConnectionManager.setMaxTotal(maxTotal);
 56             //并发数
 57             httpClientConnectionManager.setDefaultMaxPerRoute(defaultMaxPerRoute);
 58             return httpClientConnectionManager;
 59         }
 60 
 61         /**
 62          * 实例化连接池,设置连接池管理器。
 63          * 这里需要以参数形式注入上面实例化的连接池管理器
 64          * @param httpClientConnectionManager
 65          * @return
 66          */
 67         @Bean(name = "httpClientBuilder")
 68         public HttpClientBuilder getHttpClientBuilder(@Qualifier("httpClientConnectionManager")PoolingHttpClientConnectionManager httpClientConnectionManager){
 69 
 70             //HttpClientBuilder中的构造方法被protected修饰,所以这里不能直接使用new来实例化一个HttpClientBuilder,可以使用HttpClientBuilder提供的静态方法create()来获取HttpClientBuilder对象
 71             HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
 72 
 73             httpClientBuilder.setConnectionManager(httpClientConnectionManager);
 74 
 75             return httpClientBuilder;
 76         }
 77 
 78         /**
 79          * 注入连接池,用于获取httpClient
 80          * @param httpClientBuilder
 81          * @return
 82          */
 83         @Bean
 84         public CloseableHttpClient getCloseableHttpClient(@Qualifier("httpClientBuilder") HttpClientBuilder httpClientBuilder){
 85             return httpClientBuilder.build();
 86         }
 87 
 88         /**
 89          * Builder是RequestConfig的一个内部类
 90          * 通过RequestConfig的custom方法来获取到一个Builder对象
 91          * 设置builder的连接信息
 92          * 这里还可以设置proxy,cookieSpec等属性。有需要的话可以在此设置
 93          * @return
 94          */
 95         @Bean(name = "builder")
 96         public RequestConfig.Builder getBuilder(){
 97             RequestConfig.Builder builder = RequestConfig.custom();
 98             return builder.setConnectTimeout(connectTimeout)
 99                     .setConnectionRequestTimeout(connectionRequestTimeout)
100                     .setSocketTimeout(socketTimeout);
101         }
102 
103         /**
104          * 使用builder构建一个RequestConfig对象
105          * @param builder
106          * @return
107          */
108         @Bean
109         public RequestConfig getRequestConfig(@Qualifier("builder") RequestConfig.Builder builder){
110             return builder.build();
111         }
112 
113 
114 }

  第四步:测试:

    

    

 

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM