【问题标题】:Close DBCP connection on application exit在应用程序退出时关闭 DBCP 连接
【发布时间】:2015-11-17 13:25:25
【问题描述】:

在应用程序中,我们使用Apache DBCP 连接器来连接Oracle DB。但是每 30 或 40 分钟我们就会收到连接大小泄漏错误。

有没有办法在应用退出之前关闭池中的所有连接?
例如编写一个方法,该方法可以获得关闭事件,并且在该方法中我们可以安全地关闭连接。

【问题讨论】:

    标签: java oracle apache-commons-dbcp jdbc-pool


    【解决方案1】:

    在 mysql 中有一种方法可以为休眠连接提供超时(连接未正确关闭)。这在由于应用程序未正确关闭连接而导致连接泄漏的情况下很有帮助。

    在 oracle 中也应该有替代方案。

    【讨论】:

      【解决方案2】:

      当您终止您的应用程序时,所有连接都会在一些特别短的时间(例如几秒钟)后释放。但是,如果您的应用程序不处理关闭连接,它可能根本不会退出。在 finally try/catch 语句块中使用它们后,您需要关闭所有打开的连接。

      如果您的应用是 gui 应用,则 JFrame 默认不会退出,也不会终止您的应用。

      尝试在您的 JFrame 上添加此调用(如果您使用的话),它将导致应用在您单击“X”关闭窗口后永久退出;

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      

      【讨论】:

      • 我在 finally 块中使用 connection.close 语句。但是在应用程序终止后,我看到,在 oracle 中的连接没有关闭。即使在几分钟后。
      • 不,它不是 Swing 或 GUI 应用程序
      • 您完全确定您的应用退出了吗?在流程管理器中检查,您的应用程序没有正在运行的实例。
      • 要在VM的退出事件上添加hook,可以使用Runtime.getRuntime().addShutdownHook(Thread hook)
      猜你喜欢
      • 1970-01-01
      • 2015-08-08
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多