gpt4 book ai didi

Spring RestTemplate - 需要释放连接?

转载 作者:行者123 更新时间:2023-12-04 04:58:50 62 4
gpt4 key购买 nike

这是我的休息模板配置,

    @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;
}

正在使用 PoolingHttpClientConnectionManager 来管理连接。

它被以下代码访问,
ResponseEntity<String> response = restClient.exchange( url, HttpMethod.GET, entity , String.class );

我需要在上述调用后释放连接还是由 RestTemplate 处理。如果我们需要照顾释放连接。

请有人解释/展示如何释放连接。

最佳答案

您应该将 ClientHttpRequestFactory 声明为 bean。通过将其声明为 bean,它由 Spring bean 工厂管理,当应用程序关闭或 bean 超出范围时,它将调用工厂的 destroy 方法。 ClientHttpRequestFactory 的 destroy 方法将关闭底层 ClientConnectionManager 的连接池。您可以为此检查 Spring API 文档。

@Bean
public ClientHttpRequestFactory createRequestFactory(@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();
return new HttpComponentsClientHttpRequestFactory(httpClient);
}

然后你可以使用这个 bean 来创建你的 RestTemplate:
@Bean
@Qualifier("myRestService")
public RestTemplate createRestTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);

restTemplate.setErrorHandler(new RestResponseErrorHandler());
restTemplate.setMessageConverters(createMessageConverters());

return restTemplate;
}

关于Spring RestTemplate - 需要释放连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40161117/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com