这与此post有关。
我认为我有问题H2
这意味着它不能正常关闭。
我怀疑这一点,因为我看到myDB.lock.db
当我关闭tomcat和进程不停止。
我使用Tomcat的连接池和URL的数据库是:
url="jdbc:h2:file:/opt/myOrg/tomcat/webapps/MyApplication/db/myDatabase;SCHEMA=myschema"
什么是关闭H2的正确方法?
从DOC close H2:
通常,当它的最后一个连接是 关闭数据库被关闭.. ..默认情况下,关闭最后一个连接 时数据库关闭。但是,如果这是从来没有关闭,数据库时 虚拟机正常退出,用关闭挂钩
如果我做错了什么我不明白关闭。
我应该强迫数据库通过命令关闭吗?这是关机挂钩的意思吗?
我在这里做错了什么?
注:
我无法在谷歌找到如何关闭H2
正确(除了它的最后一个连接关闭时自动关闭语句)的例子。我应该自己拨打SHUTDOWN
吗?这是正确的方法吗?
我已经看到票关闭的问题,但没有发生过什么,我调查的一个例子的原因或链接
UPDATE:
后Joonas Pulakka回答一些额外的信息:
从在javacore
我使用kill -3
我看到线程:
“H2日志写入MyApplication的” J9VMThread:0x08DC6F00, j9thread_t:0x08C9B790,JAVA /郎/钍读:0xE7206CC8,状态:CW,PRIO = 5 3XMTHREADINFO1(本地线程ID:0xA32,天然 优先权:0x5的,天然的策略:UNKNOWN)3XMTHREADINFO2
(本地栈地址范围从:0xE5E26000,到:0xE5E67000, 尺寸: 0x41000)3XMTHREADINFO3的Java调用堆栈:在java的
4XESTACKTRACE /郎/的Object.wait(本机方法)在 爪哇/郎/的Object.wait(Object.java:196(编译代码
4XESTACKTRACE))4XESTACKTRACE 在组织/ H2 /store/WriterThread.run(WriterThread.java:102)
4XESTACKTRACE at java/lang/Thread.run(Thread。的java:736)3XMTHREADINFO “池-8-螺纹-1” J9VMThread:0x087C0200, j9thread_t:0x0840566C,爪哇/郎/螺纹:0xE79BFC80,状态:P,PRIO = 5
3XMTHREADINFO1(本地线程ID: 0xE1A,本地 优先级:0x5的,原生政策:未知)3XMTHREADINFO2
(本地堆栈地址范围:0xE5F69000,于:0xE5FAA000, 大小:0x41000)3XMTHREADINFO3的Java调用堆栈:在太阳/其它/ Unsafe.park
4XESTACKTRACE(本地方法)
4XESTACKTRACE java/util/concurrent/locks/LockSupport.park(LockSupport.java:184(Compiled 码))在 的Java/UTIL /并发/锁/ $的AbstractQueuedSynchronizer ConditionObject.await(AbstractQueuedSynchronizer.java:1998(编译 码))4XESTACKTRACE 4XESTACKTRACE在 的Java/UTIL /并发/ LinkedBlockingQueue.take(LinkedBlockingQueue.java:413 (编译 码))在 的Java/UTIL /并发/ ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:958(编译 码))4XESTACKTRACE 4XESTACKTRACE在 的Java/UTIL /并发/的ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:918 ) 4XESTACKTRACE at java/lang/Thread.run(Thread.java:736)3XMTHREADINFO“H2 File Lock Watchdog 选择/ MYORG/Tomcat的/ web应用/所有MyApplication /分贝/ myDatabase.lock.db” J9VMThread:0x08DC6900,j9thread_t:0x08C9BA24,JA
VA /郎/螺纹:0xE71E9018,状态:CW,PRIO = 9 3XMTHREADINFO1
(本地线程ID:0xA30,天然的优先权:0x9,本地政策:UNKNOWN)
3XMTHREADINFO2(本地栈地址范围从:0xE5DBA000, 到:0xE5DFB000,尺寸:0x41000)3XMTHREADINFO3爪哇 调用堆栈:4XESTACKTRACE在 爪哇/郎/螺纹.sleep(Native Method)4XESTACKTRACE
at java/lang/Thread.sleep(Thread.java:851(Compiled Code))
4XESTACKTRACE org/h2/store/Fil eLock.run(FileLock.java:490)4XESTACKTRACE
/郎/ Thread.run(Thread.java:736)3XMTHREADINFO “FileWatchdog” J9VMThread 是java:0x087C0800, j9thread_t:0x08C9B4FC,爪哇/郎/螺纹:0xE715D878,状态:CW,PRIO = 5
3XMTHREADINFO1(本地线程ID:0xA2C,天然 优先权:0x5的,天然的策略:UNKNOWN)3XMTHREADINFO2
(本地栈地址范围从:0xE5E67000,到:0xE5EA8000, 尺寸: 0x41000)3XMTHREADINFO3 Java调用堆栈:
4XESTACKTRACE在java/lang/Thread.sleep(本机方法) 4XESTACKTRACE在 爪哇/郎/的Thread.sleep(Thread.java:851(编译代码))4XESTACKTRACE 在组织/阿帕奇/ log4j的/助理/ FileWatchdog.run(FileWatchdog.java:104)
可能有[Play!不正确关闭H2](http://stackoverflow.com/questions/7182515/play-not-shutting-down-h2-correctly) – 2012-04-02 07:33:09
@MohamedMansour:我读过那个线程,但没有帮助。1)我关闭了tomcat而不是应用程序。所以应该没有连接打开2)答案似乎是一个工作,我试图了解是否通过挂钩的SQL命令'shutdown'的力量实际上是推荐的方法。我无法从文档 – Jim 2012-04-02 07:41:49
中看出H2调用['addShutdownHook()'](http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook%28java.lang .Thread%29),使用'org.h2.engine.DatabaseCloser'的实例。 – trashgod 2012-04-02 07:49:04