-
Notifications
You must be signed in to change notification settings - Fork 0
Description
package com.yezhaodan;
import java.io.IOException;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
@configuration
public class RestTemplateConfiguration {
@Value("${resttemplate.read.timeout:20000}")
private Integer readTimeout;
@Value("${resttemplate.connect.timeout:3000}")
private Integer connectTimeout;
@Value("${resttemplate.maxTotal:100}")
private Integer maxTotal;
@Value("${resttemplate.default.maxPerRoute:20}")
private Integer defaultMaxPerRoute;
private static final Logger logger = LoggerFactory.getLogger(RestTemplateConfiguration.class);
@Bean
public RestTemplate createRestTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
ResponseErrorHandler responseErrorHandler = new ResponseErrorHandler() {
@Override
public boolean hasError(ClientHttpResponse clientHttpResponse) throws IOException {
return true;
}
@Override
public void handleError(ClientHttpResponse clientHttpResponse) throws IOException {
}
};
restTemplate.setErrorHandler(responseErrorHandler);
return restTemplate;
}
@Bean
public ClientHttpRequestFactory createClientHttpRequestFactory(HttpClientBuilder builder) {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(builder.build());
factory.setReadTimeout(readTimeout);
factory.setConnectTimeout(connectTimeout);// ms
return factory;
}
@Bean
public HttpClientBuilder createHttpClientBuilder(HttpClientConnectionManager connManager) {
HttpClientBuilder builder = HttpClientBuilder.create();
builder.setConnectionManager(connManager);
HttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler(2, true);
builder.setRetryHandler(retryHandler);
return builder;
}
@Bean
public HttpClientConnectionManager createSSLPoolingHttpClientConnectionManagerFactory() {
PoolingHttpClientConnectionManager factory = null;
try {
factory = SSLPoolingHttpClientConnectionManagerFactory.create();
} catch (Exception e) {
logger.error("Failed to create PoolingHttpClientConnectionManager!", e);
return null;
}
factory.setMaxTotal(maxTotal);
factory.setDefaultMaxPerRoute(defaultMaxPerRoute);
return factory;
}
@Bean
public IdleConnectionEvictor createIdleConnectionEvictor(HttpClientConnectionManager connMgr) {
return new IdleConnectionEvictor(connMgr);
}
}