Iva*_*van 5 java console jvm scala reliability
当一个JVM-ran(实际上用Scala编写,但我倾向于相信Groovy,Clojure或纯Java的解决方案几乎相同)我的控制台程序被用户按下Ctrl+ C(或由系统关闭序列,我不知道程序是否有任何差异),如何确保应用程序修改的外部资源(数据库,文件,Web服务抽象资源)保留在可预测的非逻辑腐败的国家?
Kri*_*ris 10
您可以尝试实现一个关闭钩子,因为其他人指出但是:
在极少数情况下,虚拟机可能会中止,即停止运行而不会干净地关闭.当虚拟机在外部终止时会发生这种情况,例如Unix上的SIGKILL信号或Microsoft Windows上的TerminateProcess调用.如果本机方法因例如破坏内部数据结构或尝试访问不存在的内存而出错,则虚拟机也可能中止.如果虚拟机中止,则无法保证是否将运行任何关闭挂钩.
我想,你必须在我认为的应用程序中引入事务上下文.对于非常简单的数据库,对于文件系统,您可以查看Apache Commons Transaction
您通常会这样使用它:
Runtime.addShutdownHook(new Thread() {
public void run() {
// do your clean up here.
}
});
Run Code Online (Sandbox Code Playgroud)