RestTemplateConfig.java 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.huaxu.config;
  2. import org.apache.http.client.HttpClient;
  3. import org.apache.http.client.config.RequestConfig;
  4. import org.apache.http.config.Registry;
  5. import org.apache.http.config.RegistryBuilder;
  6. import org.apache.http.conn.socket.ConnectionSocketFactory;
  7. import org.apache.http.conn.socket.PlainConnectionSocketFactory;
  8. import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
  9. import org.apache.http.impl.client.HttpClientBuilder;
  10. import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.context.annotation.Bean;
  13. import org.springframework.context.annotation.Configuration;
  14. import org.springframework.http.client.ClientHttpRequestFactory;
  15. import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
  16. import org.springframework.web.client.RestTemplate;
  17. /**
  18. * @author 孤
  19. * @version v1.0
  20. * @Developers 张耀烽
  21. * @serviceProvider 四叶草安全(SeClover)
  22. * @description http工厂配置
  23. * @date
  24. */
  25. @Configuration
  26. public class RestTemplateConfig {
  27. @Autowired
  28. private ApplicationValues appValues;
  29. @Bean
  30. public RestTemplate restTemplate() {
  31. return new RestTemplate(httpRequestFactory());
  32. }
  33. @Bean
  34. public ClientHttpRequestFactory httpRequestFactory() {
  35. return new HttpComponentsClientHttpRequestFactory(httpClient());
  36. }
  37. @Bean
  38. public HttpClient httpClient() {
  39. Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
  40. .register("http", PlainConnectionSocketFactory.getSocketFactory())
  41. .register("https", SSLConnectionSocketFactory.getSocketFactory())
  42. .build();
  43. PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
  44. connectionManager.setMaxTotal(appValues.getMaxTotal());
  45. connectionManager.setDefaultMaxPerRoute(appValues.getMaxPerRoute());
  46. connectionManager.setValidateAfterInactivity(appValues.getInactivity());
  47. RequestConfig requestConfig = RequestConfig.custom()
  48. //服务器返回数据(response)的时间,超过抛出read timeout
  49. .setSocketTimeout(appValues.getSocketTimeout())
  50. //连接上服务器(握手成功)的时间,超出抛出connect timeout
  51. .setConnectTimeout(appValues.getConnTimeOut())
  52. //从连接池中获取连接的超时时间,超时间未拿到可用连接,会抛出org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
  53. .setConnectionRequestTimeout(appValues.getConnReqTimeOut())
  54. .build();
  55. return HttpClientBuilder.create()
  56. .setDefaultRequestConfig(requestConfig)
  57. .setConnectionManager(connectionManager)
  58. .build();
  59. }
  60. }