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 }
第四步:测试: