我们有一个Tomcat堆栈用于我们的web应用程序,并使用javax.sql.DataSource
作为我们的数据库连接。我们有一些方法做了大量的数据库工作,用户不需要等待,我们想把它们放在一个线程中,在后台运行,让用户继续他们的快乐之路。
我想到的最简单的方法是将数据库访问(DAO)代码包装在一个匿名的Runnable中,并将其传递给线程。
高级开发人员关心但不确定,如果Tomcat服务器在执行过程中停止,数据库连接是否会被释放,或者它是否会在事务中闲置直到时间结束。
这可能是一个问题吗?如果是这样,我们如何解决它,以便如果线程被中断/杀死数据库连接得到适当释放?
PS -我很确定我遗漏了一些,请在评论中要求澄清。
当一个进程被终止时,该进程建立的所有TCP/IP连接将被关闭。但是,如果数据库服务器(取决于供应商/版本)没有识别到这一点,并且仍然保持其会话活动,则可能仍然存在泄漏。这可能是因为应用程序没有以正常方式(即调用connection.close()
)关闭连接。
如果您有足够的权限,应该有一种方法来检查DB服务器上仍然存活的连接或会话。