没有更多客户端连接时关闭 Hsqldb 服务器

Posted

技术标签:

【中文标题】没有更多客户端连接时关闭 Hsqldb 服务器【英文标题】:Shutdown Hsqldb server when no more clients are connected 【发布时间】:2012-04-24 17:50:52 【问题描述】:

我像这样启动一个 hsqldb 1.8 服务器:

java -cp "%classpath%;.;Y:\PlantOperations\bldPlantOperations\code\lib\jboss\hsqldb-1.8.0-10.jar;C:\Documents and Settings\BThirup\Application Data\Rockwell Automation \FactoryTalk ProductionCentre\ProcessDesigner\hsqldb-1.8.0-10.jar;C:\Documents and Settings\BThirup\Application Data\Rockwell Automation\FactoryTalk ProductionCentre\ShopOperation\hsqldb-1.8.0-10.jar;" org.hsqldb.Server -database.0 文件:"C:\Documents and Settings\BThirup\Application Data\Rockwell Automation\FactoryTalk ProductionCentre\logs\ApplicationLog\mydb" -dbname.0 xdb

我有多个使用 jdbc:hsqldb:hsql://localhost/xdb;shutdown=true 连接的客户端(无特定顺序)

当没有更多客户端连接时,我想关闭 Hsqldb 服务器。

我在文档中读到,在 jdbc url 中添加 shutdown=true 会导致 hsqldb 在没有更多客户端连接后关闭。但我没有看到这种情况发生。

我也试过了

Properties info = new Properties();
            info.put("user", "SA");
            info.put("password", "");
            info.put("shutdown", "true");
conn = DriverManager.getConnection(dbString, info);

上述也不会导致 hsqldb 服务器在最后一个客户端断开连接后关闭。

对此的任何帮助表示赞赏

巴拉

【问题讨论】:

【参考方案1】:

shutdown=true 属性适用于进程内连接,而不是通过服务器连接。

如果您在服务器启动时将此属性添加到数据库 URL,它可能会起作用。这会导致数据库关闭,进而导致服务器关闭。

java -cp ... org.hsqldb.Server -database.0 文件:“C:\Documents and Settings\BThirup\Application Data\Rockwell Automation\FactoryTalk ProductionCentre\logs\ApplicationLog\mydb;shutdown=true” - dbname.0 xdb

与此无关,您只需要在类路径中引用一个 hsqldb-1.8.0-10.jar。

【讨论】:

嗨 Fredt,当我尝试按照您的建议启动 hsqldb 时:java -cp ... org.hsqldb.Server -database.0 file:"C:\Documents and Settings\BThirup\Application Data\Rockwell Automation\FactoryTalk ProductionCentre\logs\ApplicationLog\mydb;shutdown=true" -dbname.0 xdb 它不启动。我没有看到任何使用 9001 的 java 进程 -cp 后面的三个点是路径字符串的占位符。将它们替换为原始版本或缩短版本。 java -cp "%classpath%;.;Y:\PlantOperations\bldPlantOperations\code\lib\jboss\hsqldb-1.8.0-10.jar;C:\Documents and Settings\BThirup\ Application Data\Rockwell Automation\FactoryTalk ProductionCentre\ProcessDesigner\hsqldb-1.8.0-10.jar;C:\Documents and Settings\BThirup\Application Data\Rockwell Automation\FactoryTalk ProductionCentre\ShopOperation\hsqldb-1.8.0-10.jar ;" org.hsqldb.Server -database.0 文件:"C:\Documents and Settings\BThirup\Application Data\Rockwell Automation\FactoryTalk ProductionCentre\logs\ApplicationLog\mydb;shutdown=true" -dbname.0 xdb 是这个样子现在 在这种情况下,尝试使用 server.properties 文件启动服务器,该文件包含 db 路径和名称作为不带双引号的属性。自动关闭可能会或可能不会起作用,但服务器应该会启动。 拥有多个 jar 的原因是我有不同的客户端(即应用程序),安装时会将 hsqldb jar 放到不同的文件夹中。这些客户端中的任何一个都可以首先启动,并且如果一个 hsqldb 服务器不存在,则负责确保启动该服务器。其他客户端只是连接到服务器。由于我不知道正在启动哪个客户端,我选择将 jar 放在类路径中所有可能的位置。

以上是关于没有更多客户端连接时关闭 Hsqldb 服务器的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB - 9.0 之前的客户端尝试连接

SQL 客户端中的 HSQLDB 数据库

急急急!!!Oracle在设置客户端网络连接时,测试显示ORA:12357连接关闭。

Hsqldb 版本问题:客户端驱动程序版本大于 .是必须的

服务器关闭连接时客户端是不是也需要调用close

为啥在从服务器接收到所有数据后客户端套接字连接没有关闭?