'SpringBoot RestTemplate Connection Pooling: Managing Stale Connections

I am using RestTemplate with ConnectionPooling using PoolingHttpClientConnectionManager as in below code :

PoolingHttpClientConnectionManager connectionManager = new 
PoolingHttpClientConnectionManager();
    connectionManager.setMaxTotal(DEFAULT_MAX_TOTAL_CONNECTIONS);
    
connectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_CONNECTIONS_PER_ROUTE);
    connectionManager.setMaxPerRoute(new HttpRoute(new 
HttpHost(excConfig.getImsServerEndpoint())), IMS_ROUTE_MAX_CONNECTIONS);

    CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(connectionManager).build();

    HttpComponentsClientHttpRequestFactory httpReqFactory = new HttpComponentsClientHttpRequestFactory(httpclient);
    httpReqFactory.setReadTimeout(DEFAULT_HTTP_TIMEOUT_MILLISECONDS);
    httpReqFactory.setConnectionRequestTimeout(DEFAULT_HTTP_TIMEOUT_MILLISECONDS);
    httpReqFactory.setConnectTimeout(DEFAULT_HTTP_TIMEOUT_MILLISECONDS);

    restTemplate = new RestTemplate(httpReqFactory);

Does RestTemplate take care of terminating stale connections by itself? Or do I need to put in some specific handling for the same?



Solution 1:[1]

setStaleConnectionCheckEnabled has become obsolete.

HttpClients.custom() .setDefaultRequestConfig(RequestConfig.custom().setStaleConnectionCheckEnabled(true)) .setConnectionManager(connectionManager) .build();

In HttpClient 4.5.3 the below code works -

PoolingHttpClientConnectionManager connManager 
          = new PoolingHttpClientConnectionManager();
        connManager.setValidateAfterInactivity(20);

        HttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();

Solution 2:[2]

By default it does not, but you can configure it easily in your CloseableHttpClient configuration.

CloseableHttpClient httpclient = HttpClients.custom()
    .setDefaultRequestConfig(RequestConfig.custom().setStaleConnectionCheckEnabled(true))
    .setConnectionManager(connectionManager)
    .build();`

Source here.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Dandy
Solution 2 Subaru Tashiro