Vous vous demandez simplement si RestTemplate prêt à l'emploi utilise le pool de connexions ou établit-il simplement une nouvelle connexion à chaque fois?
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
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())
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