package net.lab1024.smartadmin.config; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import org.apache.http.client.HttpClient; import org.apache.http.client.config.RequestConfig; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.conn.socket.ConnectionSocketFactory; import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.FormHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; /** * [ ] * * @author yandanyang * @version 1.0 * @company 1024lab.net * @copyright (c) 2019 1024lab.netInc. All rights reserved. * @date * @since JDK1.8 */ @Configuration public class SmartRestTemplateConfig { @Value("${http.pool.max-total}") private Integer maxTotal; @Value("${http.pool.default-max-per-route}") private Integer defaultMaxPerRoute; @Value("${http.pool.socket-timeout}") private Integer socketTimeout; @Value("${http.pool.connect-timeout}") private Integer connectTimeout; @Value("${http.pool.connection-request-timeout}") private Integer connectionRequestTimeout; @Bean public RestTemplate restTemplate(ClientHttpRequestFactory factory) { return new RestTemplate(factory); } @Bean public ClientHttpRequestFactory httpRequestFactory() { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient()); return factory; } /** * fastJsonRestTemplate * * @return */ @Bean(name = "fastJsonRestTemplate") public RestTemplate fastJsonRestTemplate() { RestTemplate restTemplate = new RestTemplate(httpRequestFactory()); HttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8")); FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); List fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastConverter.setSupportedMediaTypes(fastMediaTypes); List> converters = restTemplate.getMessageConverters(); converters.add(1,converter); converters.add(fastConverter); return restTemplate; } @Bean public HttpClient httpClient() { Registry registry = RegistryBuilder.create() .register("http", PlainConnectionSocketFactory.getSocketFactory()) .register("https", SSLConnectionSocketFactory.getSocketFactory()) .build(); PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry); connectionManager.setMaxTotal(maxTotal); connectionManager.setDefaultMaxPerRoute(defaultMaxPerRoute); RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(socketTimeout) .setConnectTimeout(connectTimeout) .setConnectionRequestTimeout(connectionRequestTimeout) .build(); return HttpClientBuilder.create() .setDefaultRequestConfig(requestConfig) .setConnectionManager(connectionManager) .build(); } }