大家都知道,H2是一个功能强大的纯Java,具有服务器/客户端模式和嵌入式等特性。
在使用H2数据库开发一个小软件时,我遇到了一个问题:
软件崩溃,连接保持打开,当重新启动软件时,我无法再次访问数据库(它处于嵌入式模式,因此被锁定),为了绕过这个问题,我不得不使用任务管理器手动关闭Java虚拟机
是否有办法防止这样的事件发生(应用程序崩溃),但我可以恢复正常的连接?
发布于 2013-11-20 03:07:21
如果JVM正常存在,H2通常会关闭数据库本身,如果您自己没有显式地关闭它。
在最坏的情况下,您可能可以使用Thread#setDefaultUncaughtExceptionHandler安全地终止JVM和/或关闭数据库。
发布于 2013-11-20 03:05:12
我强烈怀疑您的程序有错误的代码,在异常情况下无法关闭连接。检查所有数据库代码,确保即使抛出异常也关闭所有连接。
一种常见的方法是关闭试图捕获的finally块上的连接。
发布于 2013-11-20 15:16:11
@Ossama Nasser:是的,你什么都能陷进去。您最好这样做,或者提前知道您决定让哪些例外终止您的程序,以及对您的程序资源会产生什么影响。
Unix程序使用setjmp() & longjmp()。它是原始的,但它对大多数信号是有效的。
但是,JVM提供了一种替代方法,即“对main()中的所有内容进行尝试/最后处理”:
Runtime.getRuntime().addShutdownHook(new <whatever you write as a handler class>)https://stackoverflow.com/questions/20086462
复制相似问题