Skip to content

Commit 03cb51f

Browse files
author
Xiong Neng
committed
update resttemplate config
1 parent 2890b40 commit 03cb51f

File tree

2 files changed

+51
-27
lines changed

2 files changed

+51
-27
lines changed

springboot-resttemplate/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
<dependency>
4444
<groupId>org.apache.httpcomponents</groupId>
4545
<artifactId>httpclient</artifactId>
46-
<version>4.3.6</version>
46+
<version>4.5.3</version>
4747
</dependency>
4848
<dependency>
4949
<groupId>org.springframework.boot</groupId>

springboot-resttemplate/src/main/java/com/xncoding/pos/config/RestClientConfig.java

Lines changed: 50 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,31 @@
66
import org.apache.http.config.RegistryBuilder;
77
import org.apache.http.conn.socket.ConnectionSocketFactory;
88
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
9+
import org.apache.http.conn.ssl.NoopHostnameVerifier;
910
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
11+
import org.apache.http.conn.ssl.TrustStrategy;
12+
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
1013
import org.apache.http.impl.client.HttpClientBuilder;
1114
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
15+
import org.apache.http.ssl.SSLContextBuilder;
16+
import org.slf4j.Logger;
17+
import org.slf4j.LoggerFactory;
1218
import org.springframework.boot.web.client.RestTemplateBuilder;
1319
import org.springframework.context.annotation.Bean;
1420
import org.springframework.context.annotation.Configuration;
1521
import org.springframework.http.client.ClientHttpRequestFactory;
1622
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
23+
import org.springframework.web.client.DefaultResponseErrorHandler;
1724
import org.springframework.web.client.RestTemplate;
1825

26+
import javax.net.ssl.HostnameVerifier;
27+
import javax.net.ssl.SSLContext;
28+
import java.security.KeyManagementException;
29+
import java.security.KeyStoreException;
30+
import java.security.NoSuchAlgorithmException;
31+
import java.security.cert.CertificateException;
32+
import java.security.cert.X509Certificate;
33+
1934
/**
2035
* RestTemplate客户端连接池配置
2136
*
@@ -26,34 +41,43 @@
2641
@Configuration
2742
public class RestClientConfig {
2843
@Bean
29-
public ClientHttpRequestFactory httpRequestFactory() {
30-
return new HttpComponentsClientHttpRequestFactory(httpClient());
31-
}
32-
33-
@Bean
34-
public RestTemplate restTemplate(RestTemplateBuilder builder) {
35-
return new RestTemplate(httpRequestFactory());
44+
public RestTemplate restTemplate() {
45+
RestTemplate restTemplate = new RestTemplate();
46+
restTemplate.setRequestFactory(clientHttpRequestFactory());
47+
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
48+
return restTemplate;
3649
}
3750

3851
@Bean
39-
public HttpClient httpClient() {
40-
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
41-
.register("http", PlainConnectionSocketFactory.getSocketFactory())
42-
.register("https", SSLConnectionSocketFactory.getSocketFactory())
43-
.build();
44-
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
45-
connectionManager.setMaxTotal(5);
46-
connectionManager.setDefaultMaxPerRoute(5);
47-
48-
RequestConfig requestConfig = RequestConfig.custom()
49-
.setSocketTimeout(8000)
50-
.setConnectTimeout(8000)
51-
.setConnectionRequestTimeout(8000)
52-
.build();
53-
54-
return HttpClientBuilder.create()
55-
.setDefaultRequestConfig(requestConfig)
56-
.setConnectionManager(connectionManager)
57-
.build();
52+
public HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() {
53+
try {
54+
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
55+
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
56+
public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
57+
return true;
58+
}
59+
}).build();
60+
httpClientBuilder.setSSLContext(sslContext);
61+
HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
62+
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
63+
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
64+
.register("http", PlainConnectionSocketFactory.getSocketFactory())
65+
.register("https", sslConnectionSocketFactory).build();// 注册http和https请求
66+
// 开始设置连接池
67+
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
68+
poolingHttpClientConnectionManager.setMaxTotal(500); // 最大连接数500
69+
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100); // 同路由并发数100
70+
httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager);
71+
httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3, true)); // 重试次数
72+
HttpClient httpClient = httpClientBuilder.build();
73+
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); // httpClient连接配置
74+
clientHttpRequestFactory.setConnectTimeout(20000); // 连接超时
75+
clientHttpRequestFactory.setReadTimeout(30000); // 数据读取超时时间
76+
clientHttpRequestFactory.setConnectionRequestTimeout(20000); // 连接不够用的等待时间
77+
return clientHttpRequestFactory;
78+
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
79+
log.error("初始化HTTP连接池出错", e);
80+
}
81+
return null;
5882
}
5983
}

0 commit comments

Comments
 (0)