Skip to content

RestTemplateConfiguration  #5

@yezhaodan

Description

@yezhaodan

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);
}

}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions