我正在尝试使用Maven Tomee插件(mvn tomee:run)来部署我的应用程序。但是,当我运行此目标时,我得到org.h2.jdbc.JdbcSQLException:数据库可能已在使用中。我确信如果转到服务器模式路由,这个问题就会消失。但是我很想知道为什么数据库被锁定,因为只有一个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数据库的唯一地方。
答案 0 :(得分:0)
我可能在燃烧半夜油后找到了答案。在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,但如果我在进程资源管理器中杀死了进程,则不会删除锁定文件。 DBStarter会在这种情况下提供帮助吗?