当前位置: 首页 > 知识库问答 >
问题:

使用RestTemplate在Spring boot Restapi中导致连接陈旧的原因是什么

史商震
2023-03-14

我读到“过时的连接是服务器断开连接但客户端不知道的结果。”但是,我正在尝试发现,如果我使用基于SpringBoot RestTemplate的应用程序(进一步使用Apache的PoolConnectionManager)并从应用程序调用另一个API,这是如何实现的?在本例中,我的应用程序是一个客户端,我调用的应用程序充当服务器。如果我点击了该应用程序,并且我正在调用的api收到了请求,但在完全填充请求之前不知何故发生了故障。在这种情况下,我肯定会得到例外在我的结束。我非常确定,万一PoolConnectionManager必须关闭那个连接。那我怎么会有陈旧的连接呢?

共有1个答案

和嘉澍
2023-03-14

默认情况下,PoolConnectionManager不会关闭过时的连接,除非您将其配置为关闭。方法setValidateAfterInactivity()用于配置该时间段。

PoolingHttpClientConnectionManager connManager 
          = new PoolingHttpClientConnectionManager();
        connManager.setValidateAfterInactivity(20);

        HttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();

您可以在这里的StackOverflow中找到类似的示例

**跟进问题后更新**

根据文档,从版本4.4开始,行为发生了一些变化。

在版本4.4中更改了对过时连接的处理。以前,代码会在重新使用之前默认检查每个连接。代码现在仅在上次使用连接后的时间超过已设置的超时时才检查连接。默认超时设置为2000ms

https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.html#setValidateAfterInactivity(int)

 类似资料:
  • 问题内容: 我们有一个Webstart客户端,它通过使用HTTPS通过HTTPS发送序列化对象来与服务器通信。 在本地计算机和办公室中的测试服务器上,一切都可以正常工作,但是我遇到了一个非常非常奇怪的问题,该问题仅在生产和登台服务器上出现(偶尔发生)。我知道这些服务器与我们办公室中的服务器之间的主要区别在于它们位于其他位置,并且与它们之间的客户端- 服务器通信速度相当慢,但在此之前的生产中也能正常

  • 问题内容: 我找到了客户端/服务器代码,但出现此错误: java.net.SocketException:软件导致连接中止:recv失败 服务器代码: 客户代码: 服务器代码提供以下输出: 客户端代码给出以下输出: 问题答案: 服务器不等待来自客户端的任何数据,并且当服务器退出时,连接将关闭。 将这样的代码添加到服务器代码中:

  • 理想情况下,我们可以对客户机和/或服务器进行一些配置,以减少这些异常的发生率,但我不太了解SPDY,甚至不知道从哪里开始查找,也不建议我们的服务器管理团队开始查找。 堆栈跟踪,以防有帮助:

  • 问题内容: 我将Spring Framework 3.2与hibernate 4结合使用,在长时间的空闲时间后在本地服务器(apache-tomcat v7.0)上发送请求并且数据库位于远程服务器上时,出现上述异常。经过数小时的搜索,我发现问题出在连接池。我尝试了多个连接池,但没有找到令人满意的解决方案。贝娄是我的弹簧数据文件上的当前数据源 请指教。 问题答案: 当连接池中的连接不再主动连接到数据

  • minecraft 1.8.8的modcoderpack918中的有一个很大的问题。我的Java版本是1.8.0_271-B09。 我不知道我必须做什么。

  • 我已经谷歌了几个小时了,我似乎不能让这个东西工作。我正在创建一个简单的Netbeans项目应用程序,允许用户登录并向应用程序添加(在数据库中存储他们的详细信息)人员。 我必须使用MySQL数据库,我已经遵循了所有指示,但我就是无法连接。请参阅下面的屏幕截图。我也在使用下载的jar。我做错了什么?请帮忙 Netbean 8.1 MySQL Server 5.6 Windows 10