【问题标题】:Tomee + H2 embedded mode + maven : Database may be already in useTomee + H2 嵌入式模式 + maven:数据库可能已经在使用中
【发布时间】: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


【解决方案1】:

我可能在午夜烧油后找到了答案。在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
  InitialSize = 5
 </Resource>

IntialSize=5 是在 H2 的嵌入模式中引起悲伤的一个。此参数在 tomee 中的默认值为 0,但在测试期间我将其更改为 5。我仍然不确定为什么它会说“数据库已被另一个进程锁定”,因为它是相同的“tomee”进程如果有的话,创建这些最初的 5 个连接。如果有人可以回答这个问题,那将很有帮助。我还观察到,如果我关闭 tomee(命令行上的 ctrl c 或 ctrl z),H2 会删除 *.lock.db 但如果我在进程资源管理器中终止 tomee 进程,则不会删除锁定文件。 DBStarter 在这种情况下会有所帮助吗?

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 2011-01-27
    • 2017-03-05
    • 2015-09-26
    • 2022-01-20
    • 2016-01-22
    • 1970-01-01
    • 2012-04-05
    • 2016-12-26
    相关资源
    最近更新 更多