Printemps RestTemplate - Nécessité de la libération de la connexion?
C'est ma Configuration pour le Repos du Modèle,
@Bean
@Qualifier("myRestService")
public RestTemplate createRestTemplate(@Value("${connection.timeout}") String maxConn) {
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setMaxTotal(maxTotalConn);
connectionManager.setDefaultMaxPerRoute(maxPerChannel);
RequestConfig config = RequestConfig.custom().setConnectTimeout(100000).build();
CloseableHttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connectionManager)
.setDefaultRequestConfig(config).build();
ClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.setErrorHandler(new RestResponseErrorHandler());
restTemplate.setMessageConverters(createMessageConverters());
return restTemplate;
}
Suis en utilisant PoolingHttpClientConnectionManager pour gérer les connexions.
Son accès par le code suivant,
ResponseEntity<String> response = restClient.exchange( url, HttpMethod.GET, entity , String.class );
Ai-je besoin pour libérer la connexion après l'appel ci-dessus ou est-il pris en charge par le RestTemplate. Si nous avons besoin de prendre soin de la libération de la connexion.
Veuillez peut-on expliquer/montrer comment libérer la connexion.
OriginalL'auteur Umar | 2016-10-20
Vous devez vous connecter pour publier un commentaire.
Vous devez déclarer le ClientHttpRequestFactory comme un haricot. En déclarant comme un haricot, il devient géré par le Printemps bean factory, qui va appeler l'usine de la méthode destroy lorsque l'application est fermée, ou le haricot est hors de portée. La méthode destroy de la ClientHttpRequestFactory va fermer le sous-jacent ClientConnectionManager du pool de connexion. Vous pouvez vérifier le Printemps de l'API docs pour cela.
Alors vous pouvez utiliser ce bean pour créer votre RestTemplate:
OriginalL'auteur Wilco Greven
La question qui vous a demandé:
Ai-je besoin pour libérer la connexion après l'appel ci-dessus ou est-il pris en charge par le RestTemplate. Si nous avons besoin de prendre soin de la libération de la connexion.
Non, vous n'avez pas besoin de fermer la connexion sur la réponse, si vous utilisez resttemplate.
De apache httpclient, vous avez besoin de consommer la réponse complète (EntityUtils.consommer(HttpEntity) et fermez la réponse.
Cela peut être vérifié dans le ClientConnectionRelease.java
Mais RestTemplate fait cela pour vous, afin de vérifier la même chose, un coup d'oeil dans
RestTemplate.java
Look pour la méthode
Où une réponse extracteur le fait pour vous par la consommation de la réponse à l'aide de
responseExtractor.extractData(réponse);
Et après l'extraction de données est complètement fermeture réponse.close ().
OriginalL'auteur Deepak Singhvi