Springs RestTemplate default connection pool

Viewed 79295

Just wondering if RestTemplate out of the box uses connection pooling or does it simply establish a new connection each time ?

5 Answers

Yes, Spring RestTemplateBuilder uses Apache HttpClient for pooling (usage). RestTemplateBuilder creates HttpComponentsClientHttpRequestFactory and uses HttpClientBuilder.

HttpClientBuilder, by default, sets pool size per route (host) to 5 and total pool size to 10 (source):

s = System.getProperty("http.maxConnections", "5"); 
int max = Integer.parseInt(s); 
poolingmgr.setDefaultMaxPerRoute(max); 
poolingmgr.setMaxTotal(2 * max); 
            

To check connection pool logging set logging level as follows:

org.apache.http.impl.conn.PoolingHttpClientConnectionManager=TRACE

You can create a Bean for RestTemplate and config there :

    @Bean
    public RestTemplate restTemplate() {
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setMaxTotal(100);
        connectionManager.setDefaultMaxPerRoute(20);

    RequestConfig requestConfig = RequestConfig
        .custom()
        .setConnectionRequestTimeout(5000) // timeout to get connection from pool
        .setSocketTimeout(5000) // standard connection timeout
        .setConnectTimeout(5000) // standard connection timeout
        .build();

    HttpClient httpClient = HttpClientBuilder.create()
                                             .setConnectionManager(connectionManager)
                                             .setDefaultRequestConfig(requestConfig).build();

    ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);


    return new RestTemplate(requestFactory);
}

And there are a lot config you can do. Refer to https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/HttpClientBuilder.html

EDIT

If you want to use micrometer metrics you should also use a RestTemplateBuilder for constructing the RestTemplate.

Related