package com.test.webservice; import com.test.util.CustomHttpRequestRetryHandler; import org.apache.http.client.HttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; public class TestHttpConnectionManager { public static final int DEFAULT_RETRY_COUNT = 3; public static final String RETRY_REQUESTS_CLOSED_ON_SERVER = "http.request.retry-server-closes-connection"; private HttpClient httpClient; private PoolingHttpClientConnectionManager poolingConnManager = new PoolingHttpClientConnectionManager(); private HttpComponentsClientHttpRequestFactory serviceOneRequestFactory; private HttpComponentsClientHttpRequestFactory serviceTwoRequestFactory; public ComarchHttpConnectionManager() { poolingConnManager.setDefaultMaxPerRoute(200); poolingConnManager.setMaxTotal(1000); poolingConnManager.setValidateAfterInactivity(100); HttpClientBuilder clientBuilder = HttpClientBuilder.create(); clientBuilder.setConnectionManager(poolingConnManager); clientBuilder.setRetryHandler(new CustomHttpRequestRetryHandler(3, false)); httpClient = clientBuilder.build(); serviceOneRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); serviceOneRequestFactory.setConnectTimeout(5000); serviceOneRequestFactory.setReadTimeout(5000); serviceTwoRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); serviceTwoRequestFactory.setConnectTimeout(10000); serviceTwoRequestFactory.setReadTimeout(10000); } public RestTemplate getAccountRestTemplate() { return new RestTemplate(serviceOneRequestFactory); } public RestTemplate getRedemptionRestTemplate() { return new RestTemplate(serviceTwoRequestFactory); } }