RestTemplateはそのままで接続プーリングを使用するのか、それとも単に新しい接続を毎回確立するのか疑問に思っていますか?
RestTemplate
はリクエストの送信に接続プールを使用せず、標準のSimpleClientHttpRequestFactory
のJDK
接続を開閉するHttpURLConnection
を使用すると考えています。
実際、RestTemplate
などのプールされた実装を使用するようにHttpComponentsClientHttpRequestFactory
を構成できますが、ほとんどの場合、リクエストのタイムアウトを防ぐためにいくつかの設定を構成する必要があります。
Troubleshooting Spring's RestTemplate Requests Timeout でこの問題についてブログを書いています
デフォルトでは、RestTemplateは毎回新しいHttpconnectionを作成し、完了したら接続を閉じます。
RESTテンプレートの下に接続プーリングが必要な場合は、接続をプールするClientHttpRequestFactoryの異なる実装を使用できます。
new RestTemplate(new HttpComponentsClientHttpRequestFactory())
はい、Spring RestTemplateBuilderはプーリングにApache httpclientを使用します( sage )。 RestTemplateBuilderはHttpComponentsClientHttpRequestFactoryを作成し、HttpClientBuilderを使用します。 HttpClientBuilderは最も興味深い( source ):
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