Спрингс RestTemplate пул соединений по умолчанию

Просто интересно, если RestTemplate из коробки использует пул соединений или просто устанавливает новое соединение каждый раз?

Ответ 1

Я считаю, что RestTemplate не использует пул соединений для отправки запросов, он использует SimpleClientHttpRequestFactory, который оборачивает стандартное JDK HttpURLConnection открытие и закрытие соединения.

На самом деле вы можете настроить RestTemplate для использования объединенной реализации, такой как HttpComponentsClientHttpRequestFactory, но, скорее всего, вам также может понадобиться настроить некоторые параметры, чтобы предотвратить тайм-аут запросов.

Я написал в блоге об этой проблеме на Устранении проблем Spring RestTemplate Тайм-аут запросов

Ответ 2

По умолчанию RestTemplate создает новое Httpconnection каждый раз и закрывает соединение после его завершения.

Если вам нужен пул соединений в шаблоне отдыха, вы можете использовать другую реализацию ClientHttpRequestFactory, которая объединяет соединения.

new RestTemplate(new HttpComponentsClientHttpRequestFactory())

Ответ 3

Да, Spring RestTemplateBuilder использует Apache httpclient для объединения (использование). RestTemplateBuilder создает HttpComponentsClientHttpRequestFactory и использует HttpClientBuilder. HttpClientBuilder - самый интересный (источник):

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

Итак, по умолчанию размер пула на маршрут (хост) равен 5. Общий размер пула = 10. Чтобы проверить ведение журнала пула соединений, установите уровень ведения журнала следующим образом:

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