由于网络健康状况不佳,我在代码中遇到了几个阻塞的JDBC连接。我正在规划java.sql.Connection.setNetworkTimeout库函数。根据医生:-
设置一个或多个连接创建的对象等待数据库响应任何一个请求的最长时间。
现在,这里的要求到底是什么?我的查询需要很长时间来响应,甚至需要更长的时间来处理(我正在使用jdbc接口来处理一个大数据数据库)。那么,我需要保持这个超时时间,大于预期的查询执行时间(以防止错误触发),还是会存在保持活动的消息,并进行交换以跟踪网络连接?在这种情况下,我将保持很低的时间?
发布于 2016-11-24 07:42:04
因此,如果您的NetworkTimeout小于QueryTimeout,查询将在等待DB响应的侧线程上终止(请注意,setNetworkTimeout有Executor executor
参数)将被中断。根据底层实现,NetworkTimeout 也可以取消数据库端的查询。
如果NetworkTimeout > QueryTimeout,并且查询在QueryTimeout内完成,那么不应该发生任何不好的事情。如果您遇到的问题正是在这种情况下发生的,那么您应该尝试在OS级别设置中保持TCP连接的活动,这样防火墙就不会太快地终止它们。
当涉及到保持TCP连接活动时,通常更多的是操作系统级别的设置,而不是应用程序本身。您可以阅读更多关于它(Linux) 这里的内容。
https://stackoverflow.com/questions/40779946
复制相似问题