如果在 Tomcat 服务器关闭时在线程中使用 JDBC 数据库连接,它们是否会被释放?



我们有一个Tomcat堆栈用于我们的web应用程序,并使用javax.sql.DataSource作为我们的数据库连接。我们有一些方法做了大量的数据库工作,用户不需要等待,我们想把它们放在一个线程中,在后台运行,让用户继续他们的快乐之路。

我想到的最简单的方法是将数据库访问(DAO)代码包装在一个匿名的Runnable中,并将其传递给线程。

高级开发人员关心但不确定,如果Tomcat服务器在执行过程中停止,数据库连接是否会被释放,或者它是否会在事务中闲置直到时间结束。

这可能是一个问题吗?如果是这样,我们如何解决它,以便如果线程被中断/杀死数据库连接得到适当释放?

PS -我很确定我遗漏了一些,请在评论中要求澄清。

当一个进程被终止时,该进程建立的所有TCP/IP连接将被关闭。但是,如果数据库服务器(取决于供应商/版本)没有识别到这一点,并且仍然保持其会话活动,则可能仍然存在泄漏。这可能是因为应用程序没有以正常方式(即调用connection.close())关闭连接。

如果您有足够的权限,应该有一种方法来检查DB服务器上仍然存活的连接或会话。

最新更新