web-dev-qa-db-fra.com

Pool de connexions par défaut Springs RestTemplate

Vous vous demandez simplement si RestTemplate prêt à l'emploi utilise le pool de connexions ou établit-il simplement une nouvelle connexion à chaque fois?

15
Sam

Je crois que RestTemplate n'utilise pas de pool de connexions pour envoyer des demandes, il utilise un SimpleClientHttpRequestFactory qui encapsule un JDK standard HttpURLConnection ouvrant et fermant le connexion.

En effet, vous pouvez configurer RestTemplate pour utiliser une implémentation groupée telle que HttpComponentsClientHttpRequestFactory, mais il est fort probable que vous deviez également configurer certains paramètres pour éviter que les demandes expirent.

J'ai blogué à propos de ce problème sur Dépannage du délai d'expiration des demandes RestTemplate de Spring

6
ootero

Par défaut, RestTemplate crée à chaque fois un nouveau Httpconnection et ferme la connexion une fois établie.

Si vous avez besoin d'un pool de connexions sous modèle de repos, vous pouvez utiliser une implémentation différente de ClientHttpRequestFactory qui regroupe les connexions.

new RestTemplate(new HttpComponentsClientHttpRequestFactory())
17
Praneeth Ramesh

Oui, Spring RestTemplateBuilder utilise Apache httpclient pour la mise en commun ( sage ). RestTemplateBuilder crée HttpComponentsClientHttpRequestFactory et utilise HttpClientBuilder. HttpClientBuilder est le plus intéressant ( source ):

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

Ainsi, par défaut, la taille du pool par route (hôte) est égale à 5. Taille totale du pool = 10. Pour vérifier la journalisation du pool de connexions, définissez le niveau de journalisation comme suit:

org.Apache.http.impl.conn.PoolingHttpClientConnectionManager=TRACE
7
Volodymyr Kret