H2 database error: Database may be already in use: “Locked by another process”
运行java项目的单元发现了一个报错:
org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another computer: 172.24.102.84". Possible solutions: close all other connection(s); use the server mode [90020-192]
错误信息的意思是,单元测试访问的h2数据库已经锁住了,无法访问。
项目中的h2配置为:
db.jdbcUrl=jdbc:h2:~/h2db/test2;MODE=Oracle;DB_CLOSE_DELAY=-1;FILE_LOCK=SOCKET db.user=root db.password=root db.driverClass=org.h2.Driver
项目中使用的h2数据库方式,是嵌入式的,并且多个单元测试类使用h2数据库,说明嵌入式的h2数据库允许多个测试类同时访问
通过参考网上的资料,找到了解决方案:
将访问嵌入式的h2数据库,改为访问h2服务:
我在49.233.203.197的远程服务器上部署了h2服务,改为访问这个远程的h2数据库
将h2配置改为:
db.jdbcUrl=jdbc:h2:tcp://49.233.203.197:19200/~/test;MODE=Oracle;DB_CLOSE_DELAY=-1;FILE_LOCK=SOCKET db.user=sa db.password= db.driverClass=org.h2.Driver
h2服务也可以在项目本地部署,然后访问本地的服务
部署h2服务参考:在linux系统部署h2服务
参考:
1.H2 database error: Database may be already in use: “Locked by another process” : https://stackoverflow.com/questions/8158969/h2-database-error-database-may-be-already-in-use-locked-by-another-process