From 07dfbffc91137d52a1d996742372244b90ac0499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johnny=20Miller=20=28=E9=94=BA=E4=BF=8A=29?= Date: Fri, 29 Jan 2021 17:06:58 +0800 Subject: [PATCH] perf($Starter): abstract rest template configuration [skip ci] --- .../MafAutoConfiguration.java | 10 +---- .../RestTemplateConfiguration.java | 41 +++++++++++++++++++ 2 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RestTemplateConfiguration.java diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/MafAutoConfiguration.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/MafAutoConfiguration.java index 59089b2b..e857c67c 100644 --- a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/MafAutoConfiguration.java +++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/MafAutoConfiguration.java @@ -55,7 +55,8 @@ RedisConfiguration.class, Swagger2Configuration.class, SftpConfiguration.class, - WebSecurityConfiguration.class + WebSecurityConfiguration.class, + RestTemplateConfiguration.class }) public class MafAutoConfiguration { @PostConstruct @@ -161,11 +162,4 @@ public JwtConfiguration jwtConfiguration(MafProjectProperty mafProjectProperty) log.warn("Initial bean: '{}'", JwtConfiguration.class.getSimpleName()); return new JwtConfiguration(mafProjectProperty); } - - @Bean - @LoadBalanced - public RestTemplate restTemplate() { - log.warn("Initial bean: '{}'", RestTemplate.class.getSimpleName()); - return new RestTemplate(); - } } diff --git a/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RestTemplateConfiguration.java b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RestTemplateConfiguration.java new file mode 100644 index 00000000..78432230 --- /dev/null +++ b/spring-boot-starter/src/main/java/com/jmsoftware/maf/springbootstarter/configuration/RestTemplateConfiguration.java @@ -0,0 +1,41 @@ +package com.jmsoftware.maf.springbootstarter.configuration; + +import lombok.extern.slf4j.Slf4j; +import lombok.val; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.DefaultResponseErrorHandler; +import org.springframework.web.client.RestTemplate; + +/** + * Description: RestTemplateConfiguration, change description here. + * + * @author 钟俊(zhongjun), email: zhongjun@toguide.cn, date: 1/29/2021 4:29 PM + **/ +@Slf4j +@Configuration +public class RestTemplateConfiguration { + @Bean + @LoadBalanced + public RestTemplate restTemplate() { + val poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(); + poolingHttpClientConnectionManager.setMaxTotal(1000); + poolingHttpClientConnectionManager.setDefaultMaxPerRoute(1000); + val httpClientBuilder = HttpClients.custom(); + httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager); + val httpClient = httpClientBuilder.build(); + val httpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); + httpComponentsClientHttpRequestFactory.setConnectTimeout(6000); + httpComponentsClientHttpRequestFactory.setReadTimeout(6000); + httpComponentsClientHttpRequestFactory.setConnectionRequestTimeout(200); + val restTemplate = new RestTemplate(); + restTemplate.setRequestFactory(httpComponentsClientHttpRequestFactory); + restTemplate.setErrorHandler(new DefaultResponseErrorHandler()); + log.warn("Initial bean: '{}'", restTemplate.getClass().getSimpleName()); + return restTemplate; + } +}