package com.qianmi.tda.config; import lombok.Setter; import org.apache.http.client.HttpClient; import org.apache.http.conn.HttpClientConnectionManager; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; /** * HttpClientConfiguration * Created by aqlu on 2016/10/27. */ @Configuration public class HttpClientConfiguration { /** * 整个连接池的并发最大数 */ @Value("${http.client.connection-manager-max-total:1000}") @Setter private int connectionManagerMaxTotal = 1000; /** * 每个主机的并发最大数 */ @Value("${http.client.connection-manager-default-max-per-route:1000}") @Setter private int connectionManagerDefaultMaxPerRoute = 1000; /** * Request连接超时时间,单位毫秒; */ @Setter @Value("${http.client.request-connect-timeout:2000}") private int requestConnectTimeout = 2000; /** * Request读取响应结果超时时间,单位毫秒 */ @Value("${http.client.request-read-timeout:10000}") @Setter private int requestReadTimeout = 10000; @Bean(name = "defaultHttpClientConnectionManager") @ConditionalOnMissingBean public HttpClientConnectionManager httpClientConnectionManager() { PoolingHttpClientConnectionManager clientConnectionManager = new PoolingHttpClientConnectionManager(); clientConnectionManager.setMaxTotal(connectionManagerMaxTotal); // 整个连接池的并发 clientConnectionManager.setDefaultMaxPerRoute(connectionManagerDefaultMaxPerRoute); // 每个主机的并发 return clientConnectionManager; } @Bean(name = "defaultHttpClient") @ConditionalOnMissingBean public HttpClient httpClient() { HttpClientBuilder builder = HttpClientBuilder.create(); builder.setConnectionManager(httpClientConnectionManager()); return builder.build(); } @Bean(name = "defaultClientHttpRequestFactory") @ConditionalOnMissingBean public ClientHttpRequestFactory clientHttpRequestFactory() { HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory( httpClient()); clientHttpRequestFactory.setConnectTimeout(requestConnectTimeout); clientHttpRequestFactory.setReadTimeout(requestReadTimeout); return clientHttpRequestFactory; } @Bean(name = "defaultRestTemplate") @ConditionalOnMissingBean public RestTemplate restTemplate() { return new RestTemplate(clientHttpRequestFactory()); } }