gpt4 book ai didi

java - 多个 Java 应用程序访问一个 HSQLDB 导致应用程序挂起

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:07 25 4
gpt4 key购买 nike

这与我之前的 question 半相关.正如前面的问题所述,我有一个桌面应用程序调用另一个将启动特定进程的 Main 方法。桌面应用程序和单独的 Main 方法都将访问同一个 HSQLDB 数据库。

在此之前,我的桌面应用程序只是使用像这样的连接 URL 访问 HSQLDB 数据库:

jdbc:hsqldb:file:/some/path/myDatabase

现在这在单用户环境中工作正常。现在我已经有了一个多用户环境,其中包含桌面应用程序和想要读取/写入此数据库的单独主进程,我想使此数据库成为共享资源。

我看过 HSQLDB documentation和这篇关于 Creating a shared HSQLDB database 的帖子但无济于事。

在帖子中,它讨论了通过代码启动服务器。我不认为这是我想要做的,因为我希望 HSQLDB 数据库一直启动并运行,因为桌面应用程序可能有多个用户。

查看官方 HSQLDB 文档,它指出您可以像这样启动 HSQLDB 服务器:

java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb

如果我用我自己的数据库文件和名称运行上面的命令,它似乎可以正常启动:

[Server@6ca1c]: [Thread[main,5,main]]: checkRunning(false) entered
[Server@6ca1c]: [Thread[main,5,main]]: checkRunning(false) exited
[Server@6ca1c]: Startup sequence initiated from main() method
[Server@6ca1c]: Loaded properties from [/some/path/myDatabase/server.properties]
[Server@6ca1c]: Initiating startup sequence...
[Server@6ca1c]: Server socket opened successfully in 16 ms.

然后我将连接 URL 更改为以下内容:

jdbc:hsqldb:hsql://localhost/xdb

这似乎对我不起作用。关于我做错了什么或我可能遗漏了什么有什么想法吗?

此外,当桌面应用程序调用外部 Main 方法时,桌面应用程序只是挂起,因为外部 Main 方法注意到桌面应用程序似乎锁定了数据库。一旦我关闭桌面应用程序,外部 Main 方法实际上会执行我预期的操作。

最佳答案

使用 jdbc:hsqldb:file:/some/path/myDatabase 你正在创建一个进程内数据库,所以这不应该在多个 JVM 之间共享(理想情况下),但是有一种方法每个指南

"In 1.8.0, you can run a server instance in a thread from the same virtual machine as your application and provide external access to your in-process database."

恕我直言,更好的方法是在单独的 jvm 中以服务器模式启动。

更新:

在 hsqlsdb 服务器启动时检查你的日志:

[Server@83cc67]: Initiating startup sequence...
[Server@83cc67]: Server socket opened successfully in 31 ms.
[Server@83cc67]: Database [index=0, id=0, db=file:test, alias=] opened sucessfully in 250 ms.

匹配驱动程序url中的别名

Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/", "sa", "");

在这种情况下没有别名。我刚刚对此进行了测试,它运行良好。

关于java - 多个 Java 应用程序访问一个 HSQLDB 导致应用程序挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4319993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com