Tomcat服务器关闭时,如果在线程中使用JDBC数据库连接,它们会被释放吗?
Posted
技术标签:
【中文标题】Tomcat服务器关闭时,如果在线程中使用JDBC数据库连接,它们会被释放吗?【英文标题】:Will JDBC database connections get released if they're used in a thread when Tomcat server shuts down? 【发布时间】:2014-06-17 18:13:13 【问题描述】:我们的网络应用程序有一个 Tomcat 堆栈,并使用 javax.sql.DataSource
进行数据库连接。我们有一些方法可以完成很多用户不需要等待的数据库工作,我们希望将它们放入一个线程并在后台运行,让用户继续他们愉快的方式。
我想出的最简单的方法是将数据库访问 (DAO) 代码包装在匿名 Runnable 中并将其传递给线程。
高级开发人员担心但不确定如果Tomcat服务器在执行过程中停止,数据库连接是否会被释放,或者它是否会在事务中闲置直到时间结束。
这是一个可能的问题吗?如果是这样,我们将如何解决它,以便如果线程被中断/杀死,数据库连接会被正确释放?
PS - 我很确定我遗漏了一些东西,请在 cmets 中进行澄清。
【问题讨论】:
那为什么高级开发人员不测试呢?或者你测试过吗? 【参考方案1】:当一个进程终止时,该进程建立的所有 TCP/IP 连接都将被关闭。但是,如果数据库服务器(取决于供应商/版本)无法识别这一点并且仍然保持其会话处于活动状态,则可能仍然存在泄漏。这可能是因为应用程序没有以正常方式(即调用connection.close()
)关闭连接。
如果您有足够的权限,应该有一种方法可以检查数据库服务器上仍然存在的连接或会话。
【讨论】:
我想说的是,一般来说数据库服务器会检测到断开连接的套接字并关闭连接/会话。以上是关于Tomcat服务器关闭时,如果在线程中使用JDBC数据库连接,它们会被释放吗?的主要内容,如果未能解决你的问题,请参考以下文章