如果应用程序在没有关闭其活动连接的情况下崩溃或退出,Java JRE是否会关闭数据库连接?如果不是,数据库有责任超时这些连接吗?
据我所知,如果Java崩溃,那么数据库将需要超时所有打开的连接,因为没有其他工作可以完成。
修改 额外的想法。如果在Tomcat中部署的WAR崩溃,Tomcat服务器是否会清理打开的连接?
答案 0 :(得分:2)
这真的取决于。
如果您的JRE本身崩溃,则可能无法关闭所有连接。如果只是您的应用程序崩溃,它可能能够在释放资源时关闭连接。根据我的经验,只要JRE本身不会死亡,大多数情况下似乎就是这种情况。最好的防御当然是正确的错误处理,并确保没有比所需更多的连接打开。
根据我的经验,最好在Tomcat中设置数据源,这样,即使您的应用程序崩溃,这也不是开放资源的问题。我非常喜欢让我的应用程序服务器尽可能多地处理资源管理,这样我就可以从有时冒险的代码中受到更多保护。
答案 1 :(得分:0)
大多数情况下,您的应用程序应该在任何正确的错误处理程序中关闭连接。我更喜欢在Tomcat中设置数据源,就像Ewald提到的那样。在那里,您可以定义最大连接数,以及context.xml
中的超时时间。当您的应用程序堆叠太多连接时,它将释放它。