H2嵌入模式和软件崩溃

时间:2013-11-20 02:57:30

标签: java crash h2 embedded-database

众所周知,H2是一个功能强大的纯Java DBMS,具有服务器/客户端模式和嵌入式的多种功能 当使用H2数据库处理一个小软件时,我遇到了一个问题:
软件崩溃并且连接保持打开状态,重新启动软件时我无法再次访问数据库(它处于嵌入模式,因此被锁定)并绕过此问题我不得不使用任务管理器手动关闭Java虚拟机 有没有办法防止这样的事件发生(应用程序崩溃),但我可以正常恢复连接?

3 个答案:

答案 0 :(得分:1)

当JVM正常存在时,H2通常会关闭数据库本身,如果你没有明确地完成它。

在最坏的情况下,您可以使用Thread#setDefaultUncaughtExceptionHandler安全地终止JVM和/或关闭数据库

答案 1 :(得分:1)

@Ossama Nasser:是的,你可以捕获一切。你最好这样做,或事先知道你决定终止你的程序的例外,以及你的程序资源会有什么影响。

Unix-C程序使用setjmp()& longjmp的()。它很原始,但对大多数信号都有效。

但是,JVM提供了“在main()中尝试/最终解决所有问题”的方法的替代方法:

Runtime.getRuntime().addShutdownHook(new <whatever you write as a handler class>)

答案 2 :(得分:0)

我强烈怀疑你的程序遭受了错误的代码无法在异常时关闭连接。检查所有数据库代码,并确保即使抛出异常也关闭所有连接。

一种常见的方法是关闭try-catch-finally的finally块上的连接。