web-dev-qa-db-ja.com

Springs RestTemplateのデフォルト接続プール

RestTemplateはそのままで接続プーリングを使用するのか、それとも単に新しい接続を毎回確立するのか疑問に思っていますか?

15
Sam

RestTemplateはリクエストの送信に接続プールを使用せず、標準のSimpleClientHttpRequestFactoryJDK接続を開閉するHttpURLConnectionを使用すると考えています。

実際、RestTemplateなどのプールされた実装を使用するようにHttpComponentsClientHttpRequestFactoryを構成できますが、ほとんどの場合、リクエストのタイムアウトを防ぐためにいくつかの設定を構成する必要があります。

Troubleshooting Spring's RestTemplate Requests Timeout でこの問題についてブログを書いています

6
ootero

デフォルトでは、RestTemplateは毎回新しいHttpconnectionを作成し、完了したら接続を閉じます。

RESTテンプレートの下に接続プーリングが必要な場合は、接続をプールするClientHttpRequestFactoryの異なる実装を使用できます。

new RestTemplate(new HttpComponentsClientHttpRequestFactory())
17
Praneeth Ramesh

はい、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
7
Volodymyr Kret