How to Create a Pooled RestTemplate in Spring
To create a pooled RestTemplate we need to use HttpComponentsClientHttpRequestFactory which uses CloseableHttpClient from httpclient library...
To create a pooled RestTemplate we need to use HttpComponentsClientHttpRequestFactory which uses CloseableHttpClient from httpclient library (at least version 4.3 to support timeout.
1. Dependencies
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency>
2. Create HttpComponentsClientHttpRequestFactory
private HttpComponentsClientHttpRequestFactory newHttpComponentsClientHttpRequestFactory() {
final PoolingHttpClientConnectionManager poolingHttpClientConnectionManager =
new PoolingHttpClientConnectionManager();
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100);
poolingHttpClientConnectionManager.setMaxTotal(100);
final RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(100)
.setConnectTimeout(100)
.setSocketTimeout(100)
.build();
CloseableHttpClient closeableHttpClient = HttpClientBuilder.create()
.setConnectionManager(poolingHttpClientConnectionManager)
.setDefaultRequestConfig(requestConfig)
.build();
final HttpComponentsClientHttpRequestFactory httpRequestFactory =
new HttpComponentsClientHttpRequestFactory();
httpRequestFactory.setConnectionRequestTimeout(connectionRequestTimeout);
httpRequestFactory.setConnectTimeout(100);
httpRequestFactory.setReadTimeout(100);
httpRequestFactory.setHttpClient(closeableHttpClient);
return httpRequestFactory;
}
3. Create RestTemplate
private RestTemplate newRestTemplate(final HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jackson2HalModule());
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessagemappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaTypes.HAL_JSON, MediaType.APPLICATION_JSON));
mappingJackson2HttpMessageConverter.setObjectobjectMapper(objectMapper);
final DefaultUriBuilderFactory defaultUriBuilderFactory = new DefaultUriBuilderFactory();
defaultUriBuilderFactory.setEncodingMode(DefaultUriBuilderFactory.EncodingMode.VALUES_ONLY);
return new RestTemplateBuilder()
.messagemappingJackson2HttpMessageConverters(mappingJackson2HttpMessageConverter)
.rootUri(baseUrl)
.uriTemplateHandler(defaultUriBuilderFactory)
.requestFactory(() -> httpComponentsClientHttpRequestFactory)
.build();
}
4. How to use
final RestTemplate restTemplate = newRestTemplate(newHttpComponentsClientHttpRequestFactory());




Post a Comment