【发布时间】:2014-10-02 08:14:58
【问题描述】:
我正在尝试使用 Maven Tomee 插件 (mvn tomee:run) 来部署我的应用程序。但是,当我运行这个目标时,我得到 org.h2.jdbc.JdbcSQLException: Database may be already in use。我确信如果使用服务器模式路由,这个问题就会消失。但我很想知道为什么数据库会被锁定,因为应该只有一个 JVM 访问这个数据库。
tomee.xml 片段
<Resource jndi="test_DS" id="test_DS" type="DataSource">
JdbcDriver = org.h2.Driver
JdbcUrl = jdbc:h2:C:\\test\\target\\webui-1.0-SNAPSHOT\\WEB-INF\\classes\\test_db2
UserName = sa
Password = sa
</Resource>
我确信这是我唯一可以访问 H2 数据库的地方。
【问题讨论】:
-
在运行之前,是否有
test_db2.lock.db文件?如果删除它,它会自动重新创建吗?如果是,那么必须有一个创建此文件的进程:它是打开数据库的进程吗?使用jps -l检查 Java 进程。 -
@Thomas Mueller 我一直在寻找那个文件。但我在 C:\\test\\target\\webui-1.0-SNAPSHOT\\WEB-INF\\classes\\test_db2 中没有看到它。我看到有两个java进程,一个是我猜的maven,另一个是tomee
-
这里是 jps -l C:\Windows\System32>jps -l 6012 sun.tools.jps.Jps 12228 C:\DevPrograms\Eclipse\Luna\Luna_64\\plugins/org 的输出.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar 5808 org.codehaus.plexus.classworlds.launcher.Launcher 1176 org.apache.catalina.startup.Bootstrap
-
我添加了 FILELOCK=FILE;到 URL,我可以确认每次删除它时创建此文件的是 tomee。那么有没有人让他们的 webapp 与配置了 DB 资源的 TOMEE 一起工作?以下是确切的例外严重:无法创建池的初始连接。 org.h2.jdbc.JdbcSQLException:数据库可能已在使用中:“被另一个进程锁定”。可能的解决方案:关闭所有其他连接;在 org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 处使用服务器模式 [90020-180]
-
创建了哪个文件,为什么以及如何删除它?我不清楚你所做的事情的描述。另外,我建议尝试不同的目录,例如
C:\temp\data,以排除它是访问权限问题。
标签: maven h2 apache-tomee