如何在程序结束时关闭数据库连接?

Ere*_*evi 5 java resources jdbc

在 Java 程序中,我有一个单例类,用于保存整个程序使用的数据库连接。

当程序结束时,如何告诉 Java 关闭连接?

我可以在 main 的末尾放置一个 connection.close() 语句,但是如果程序意外结束,例如,由于未捕获的异常或程序中某处的“退出”调用,则不会执行该语句。无论程序如何结束,我如何告诉 Java 关闭连接?

And*_*lko 6

如果可以调用该方法,您可以使用VM 关闭挂钩。System.exit

Runtime.getRuntime().addShutdownHook(new Thread(() -> closeDatabaseConnection()));
Run Code Online (Sandbox Code Playgroud)

如果程序正常退出,关闭钩子也会被调用:

Java 虚拟机关闭以响应两种事件:

  • 当最后一个非守护线程退出或System.exit调用该方法时,程序正常退出,或者
  • 虚拟机会因响应用户中断(例如键入^C)或系统范围的事件(例如用户注销或系统关闭)而终止。

但如果发生意外情况,并不能保证它们会运行:

在极少数情况下,虚拟机可能会中止,即停止运行而不完全关闭。当虚拟机从外部终止时会发生这种情况,例如使用SIGKILLUnix 上的信号或TerminateProcessMicrosoft Windows 上的调用。如果本机方法出现错误,例如损坏内部数据结构或尝试访问不存在的内存,则虚拟机也可能中止。如果虚拟机中止,则无法保证是否会运行任何关闭挂钩。