我正在使用Play来编写一个部署在Tomcat中的webapp。因为应用程序不会处理非常多的数据,所以我在Hibernate中使用默认的H2数据库。当我想部署新版本的应用程序时,我关闭了tomcat,清除旧的Web应用程序和WAR,添加新的WAR,然后开始备份。玩!不正确关闭H2
这工作到几天前,当我添加数据库组件。现在,我经常无法重新部署应用程序。当我删除旧目录时,它会自动重新生成以下结构:
$ ls -laR myapp/
myapp/:
total 24
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .
drwxr-xr-x 13 root root 4096 Aug 24 17:20 ..
drwxr-xr-x 3 root root 4096 Aug 24 17:20 WEB-INF
myapp/WEB-INF:
total 24
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .
drwxr-xr-x 3 root root 4096 Aug 24 17:20 ..
drwxr-xr-x 3 root root 4096 Aug 24 17:20 application
myapp/WEB-INF/application:
total 24
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .
drwxr-xr-x 3 root root 4096 Aug 24 17:20 ..
drwxr-xr-x 3 root root 4096 Aug 24 17:20 db
myapp/WEB-INF/application/db:
total 24
drwxr-xr-x 3 root root 4096 Aug 24 17:20 .
drwxr-xr-x 3 root root 4096 Aug 24 17:20 ..
drwxr-xr-x 2 root root 4096 Aug 24 17:20 h2
myapp/WEB-INF/application/db/h2:
total 24
drwxr-xr-x 2 root root 4096 Aug 24 17:20 .
drwxr-xr-x 3 root root 4096 Aug 24 17:20 ..
-rw-r--r-- 1 root root 100 Aug 24 17:20 play.lock.db
WAR解压缩时也会发生同样的情况。
我最近注意到catalina.out日志中的一条消息,抱怨我的应用程序没有关闭一个名为“H2 File Lock Watchdog”的进程。基于对H2文档的简短搜索,我认为这个过程是干扰我的应用的。
编辑
下面是在日志文件中抱怨行:
所以,我怎么杀这个过程?我无法重新启动机器,因为它不是我的,我无法找到带有top
或ps
的看门狗。我更喜欢Play的方式来自动关闭它,但我并没有将它构建到我的部署脚本中。
如果您已经阅读了这篇文章,非常感谢!
另一点值得一提的是数据库进程显然最终死亡。我不知道需要多长时间,但它是在几个小时的规模。等待它只是一种解决方案,但总比没有好? – andronikus