我正在尝试使用Java应用程序中的H2数据库.
我通过H2控制台创建了数据库及其表,然后尝试使用Java连接
Connection con = DriverManager.getConnection("jdbc:h2:~/dbname", "username", "password");
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
线程"main"中的异常org.h2.jdbc.JdbcSQLException:数据库可能已在使用中:"被另一个进程锁定".可能的解决方案:关闭所有其他连接; 使用服务器模式[90020-161]
我试图删除该dbname.lock.db文件,但它会自动重新创建.
如何解锁数据库以从我的Java程序中使用它?
Dan*_*man 44
H2仍然在运行(我可以保证).您需要为多个用户使用TCP连接,例如 - >
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/C:\Database\Data\production;"/>
Run Code Online (Sandbox Code Playgroud)
要么
DriverManager.getConnection("jdbc:h2:tcp://localhost/server~/dbname","username","password");
Run Code Online (Sandbox Code Playgroud)
这也意味着您需要以TCP模式启动服务器.实际上,它在文档中非常直接.
强制终止进程(适用于Windows的javaw.exe),并确保关闭可能已启动它的任何应用程序.你有一个主动锁.
小智 13
我正在使用h2db与测试T24 tafj应用程序,我有同样的问题,但我设法通过识别运行h2的应用程序(当我尝试设置数据库连接时启动)来解决它.
ps aux|grep java
Run Code Online (Sandbox Code Playgroud)
将输出为:
sysadmin 22755 3.2 0.1 5189724 64008 pts/3 Sl 08:28 0:00 /usr/java/default/bin/java -server -Xmx2048M -XX:MaxPermSize=256M -cp h2-1.3.175.jar:/r14tafj/TAFJ/dbscripts/h2/TAFJFunctions.jar org.h2.tools.Server -tcp -tcpAllowOthers -baseDir /r14tafj/t24/data
Run Code Online (Sandbox Code Playgroud)
现在用它的进程id杀死它:
kill -9 22755
Run Code Online (Sandbox Code Playgroud)
最后删除锁定文件:
rm -f dbname.lock.db
Run Code Online (Sandbox Code Playgroud)
我有同样的问题。在Intellj中,当我想在程序运行时使用h2数据库时,出现了相同的错误。为了解决这个问题,我更改了连接网址
spring.datasource.url=jdbc:h2:file:~/ipinbarbot
Run Code Online (Sandbox Code Playgroud)
至:
spring.datasource.url=jdbc:h2:~/ipinbarbot;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE
Run Code Online (Sandbox Code Playgroud)
然后我的问题就消失了。现在我可以在程序运行时连接到“ ipinbarbot”数据库。如果您使用Hibernate,也不要忘记拥有:
spring.jpa.hibernate.ddl-auto = update
Run Code Online (Sandbox Code Playgroud)
祝好运
您也可以删除 h2 文件数据库的文件,问题就会消失。
jdbc:h2:~/dbname 表示将在用户主目录中创建名为 db name 的文件 h2 数据库(~/ 表示用户主目录,希望你在 Linux 上工作)。
在我的本地机器中,它存在于:/home/jack/dbname.mv.db 我不知道为什么文件的名称是 dbname.mv.db 而不是 dbname。可能是它的 h2 默认设置。我删除这个文件:
rm ~/dbname.mv.db
Run Code Online (Sandbox Code Playgroud)
或者:
cd ~/
rm dbname.mv.db
Run Code Online (Sandbox Code Playgroud)
数据库 dbname 将与所有数据一起删除。新数据库初始化后一切都会好起来的。
我从上面的萨曼·萨利希那里得到了线索。我的用例:为客户端负载平衡(运行两个REST的JVM实例)准备REST应用程序。在这里,我的MVC应用程序将调用此REST应用程序,该应用程序具有DATA的ActiveMQ后端。我在Eclipse中运行两个REST应用程序实例并尝试使用以下配置同时运行两个实例时遇到了问题
spring.datasource.url=jdbc:h2:file:./Database;
spring.jpa.properties.hibernate.hbm2ddl.auto=update
Run Code Online (Sandbox Code Playgroud)
添加后DB_CLOSE_ON_EXIT = FALSE; AUTO_SERVER = TRUE
spring.datasource.url=jdbc:h2:file:./Database;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE
Run Code Online (Sandbox Code Playgroud)
这两个实例都在运行并在Eureka仪表板上显示。
VM退出时不要关闭数据库:jdbc:h2:; DB_CLOSE_ON_EXIT = FALSE
多个进程可以访问同一数据库,而无需手动启动服务器; AUTO_SERVER = TRUE
进一步阅读:http : //www.h2database.com/html/features.html
| 归档时间: |
|
| 查看次数: |
79818 次 |
| 最近记录: |