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 }
第四步:測試: