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