由于网络运行状况不佳,我在代码中遇到了几个卡死的JDBC连接。我正在计划java.sql.Connection.setNetworkTimeout库函数。根据文档:-


  设置连接或从连接创建的对象将等待数据库回复任何一个请求的最长时间


现在,这里的要求到底是什么?我的查询需要很长时间才能响应,甚至需要更长的时间来处理(我正在使用到大数据数据库的jdbc接口)。因此,我是否需要将这个超时时间保持为大于预期的查询执行时间(以防止错误触发),还是会存在保持活动的消息(进行交换以跟踪网络连接)?在这种情况下,我将其保持在较低水平

最佳答案

因此,如果您的NetworkTimeout小于QueryTimeout,则查询将在您端终止-等待DB答复的线程(注意setNetworkTimeout具有Executor executor参数)将被中断。根据基础实现,NetworkTimeout可能还会取消数据库端的查询。

如果NetworkTimeout> QueryTimeout,并且查询在QueryTimeout中完成,则不会发生任何不良情况。如果您遇到的问题恰恰在这种情况下,则应尝试在OS级别上进行设置,以保持TCP连接保持活动状态,以便没有防火墙过早地终止它们。

要保持TCP连接的活动性,通常更多的是操作系统级别的设置,而不是应用程序本身。您可以阅读有关它的更多信息(Linux)here

10-05 18:36