Derby/JDBC 连接生命周期(或空闲超时)

Posted

技术标签:

【中文标题】Derby/JDBC 连接生命周期(或空闲超时)【英文标题】:Derby/JDBC connection lifetime (or Idle Timeout) 【发布时间】:2012-07-18 16:24:00 【问题描述】:

使用 JDBC 连接到 Derby 数据库,一段时间后,Derby 或 JDBC 会自动关闭连接。 (这可以称为“连接生命周期”值或超时值)。

在哪里可以找到超时值?是 Derby 还是 JDBC 关闭了连接?它是一个“空闲超时”值吗?所以,如果该连接上有活动,Derby 或 JDBC 是否会更新以在 (LastActivity + IdleTimeoutValue) 时关闭连接?

我看了一堆页面,包括 Connection timeout for DriverManager getConnection How to reestablish a JDBC connection after a timeout?

【问题讨论】:

【参考方案1】:

据我所知,Derby 和 JDBC 都没有任何自动超时。

以下是 Derby JDBC 连接的可配置行为: http://db.apache.org/derby/docs/10.8/ref/rrefattrib24612.html

我认为 Derby 不会关闭你的连接。

我怀疑您的网络防火墙、*** 或其他一些设备正在关闭您明显空闲的 TCP/IP 连接。

尝试与您的 IT 人员一起检查您的网络配置。

【讨论】:

如果 Derby 和 JDBC 由于不活动而关闭连接,则要么两个链接中的信息(在原始帖子/问题中)不正确,要么我误解了他们在说什么。有什么想法吗? 这可能会导致另一个区域,TCP keepalive;如果这是问题所在,要么在操作系统级别设置它,要么以某种方式告诉 Derby 使用 keepalive(它不在 derby 可配置行为文档中)。我也使用 ActiveMq,所以必须告诉 ActiveMq 的套接字也保持活动状态。如果有关于如何针对此类问题进行配置和编程的文章,我想阅读它! 更准确地说,我的意思是,Derby 的 JDBC 实现不会因为超时而关闭空闲的连接,而 JDBC 不需要这样的特性。实际上,正如您在原始问题中所链接的那样,其他 JDBC 实现可能会提供这样的功能。同样,您应该让您的 IT 人员帮助启用网络层诊断,以找出您的空闲连接被关闭的原因,因为我不相信是 Derby 做的。 您可能是对的,与计算机的远程连接也断开了,我们必须重新连接。我们网络中的某些东西可能会定期破坏所有连接(我怀疑是 DHCP 租约)。当我了解更多信息时,我会更新此评论。我怀疑 WGR614v10 netgear 路由器,尽管网络中还有其他交换机值得怀疑。 低技术测试:我们在作业运行时关闭网络开关 30 秒,得到相同的结果。更多更新即将到来。

以上是关于Derby/JDBC 连接生命周期(或空闲超时)的主要内容,如果未能解决你的问题,请参考以下文章

Java线程池中线程的生命周期

2react-生命周期1※※※

2react-生命周期1※※※

JDBC Oracle Thin ORA-02396 连接空闲超时

如何正确处理连接空闲超时错误

Apache HttpClient 4.3 - 设置连接空闲超时