只是想知道开箱即用的 RestTemplate 是使用连接池还是每次都只是建立一个新连接?
原文由 Sam 发布,翻译遵循 CC BY-SA 4.0 许可协议
只是想知道开箱即用的 RestTemplate 是使用连接池还是每次都只是建立一个新连接?
原文由 Sam 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的,Spring RestTemplateBuilder
使用 Apache HttpClient 进行池化( 用法)。 RestTemplateBuilder
创建 HttpComponentsClientHttpRequestFactory
并使用 HttpClientBuilder
。
HttpClientBuilder
,默认情况下,将每个路由(主机)的池大小设置为 5,总池大小设置为 10( 来源):
s = System.getProperty("http.maxConnections", "5");
int max = Integer.parseInt(s);
poolingmgr.setDefaultMaxPerRoute(max);
poolingmgr.setMaxTotal(2 * max);
要检查连接池日志记录设置日志记录级别,如下所示:
org.apache.http.impl.conn.PoolingHttpClientConnectionManager=TRACE
原文由 Volodymyr Kret 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答1.6k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答905 阅读✓ 已解决
1 回答890 阅读✓ 已解决
3 回答1.1k 阅读
2 回答1.1k 阅读
I believe
RestTemplate
doesn’t use a connection pool to send requests, it uses aSimpleClientHttpRequestFactory
that wraps a standardJDK
’sHttpURLConnection
打开和关闭连接。事实上,您可以配置
RestTemplate
以使用诸如HttpComponentsClientHttpRequestFactory
类的池化实现,但很可能您可能还需要配置一些设置以防止请求超时。我已经在 Troubleshooting Spring’s RestTemplate Requests Timeout 上 写了关于这个问题的博客