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