Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database h2内存表中,远程连接_Database_Jdbc_Embedded Database_H2 - Fatal编程技术网

Database h2内存表中,远程连接

Database h2内存表中,远程连接,database,jdbc,embedded-database,h2,Database,Jdbc,Embedded Database,H2,我在创建内存中的表、使用H2数据库以及在创建和运行它的JVM之外访问它时遇到问题 文档将url结构为jdbc:h2:tcp:///mem: 我尝试了许多组合,但根本无法让远程连接工作。这项功能有效吗?有人能告诉我他们是如何使用这项功能的详细信息吗。你可以看看。对于网络连接,您需要主机名和数据库名。看起来你想在elf上看到这些: jdbc:h2:tcp://localhost/mem:db1 jdbc:h2:tcp://127.0.0.1/mem:db1 可以找到完整的示例,并且;检查了相关示例

我在创建内存中的表、使用H2数据库以及在创建和运行它的JVM之外访问它时遇到问题

文档将url结构为
jdbc:h2:tcp:///mem:

我尝试了许多组合,但根本无法让远程连接工作。这项功能有效吗?有人能告诉我他们是如何使用这项功能的详细信息吗。

你可以看看。对于网络连接,您需要主机名和数据库名。看起来你想在elf上看到这些:

jdbc:h2:tcp://localhost/mem:db1
jdbc:h2:tcp://127.0.0.1/mem:db1

可以找到完整的示例,并且;检查了相关示例。

刚刚遇到这个问题后,我发现需要将
DB\u CLOSE\u DELAY=-1
附加到用于tcp连接的JDBC URL。我的网址是:

  • 内存中:
    jdbc:h2:mem:dbname
  • TCP连接:
    jdbc:h2:tcp://localhost:9092/dbname;数据库关闭延迟=-1
:

默认情况下,关闭与数据库的最后一个连接将关闭 数据库对于内存中的数据库,这意味着内容丢失。 要保持数据库打开,请添加
;数据库的DB_CLOSE_DELAY=-1
网址


不包括
DB\u CLOSE\u DELAY=-1意味着我无法通过TCP连接到正确的数据库。虽然建立了连接,但它使用的版本与在内存中创建的版本不同(通过使用
IFEXISTS=true
参数进行验证)

到目前为止,提到的任何解决方案都不适用于我。远程部分无法连接

根据H2的:

要从另一个进程或另一台计算机访问内存中的数据库,您需要在创建内存中数据库的同一进程中启动TCP服务器。然后,其他进程需要通过TCP/IP或TLS访问数据库,使用数据库URL,例如:jdbc:h2:tcp://localhost/mem:db1.

我用粗体标出了正文的关键部分

我在这家伙那里找到了一个可行的解决方案:

第一个进程将使用以下URL创建数据库:

jdbc:h2:mem:db1

它需要启动一个tcp服务器:

org.h2.tools.Server Server=org.h2.tools.Server.createTcpServer().start()

然后,其他进程可以使用以下URL访问您的数据库:

jdbc:h2:tcp://localhost/mem:db1“

就这样!工作得很有魅力

在SpringBoot中:


如果您列出了尝试的组合,那就好了。您在设置服务器(侦听某个TCP端口)或客户端(连接到服务器)时是否有问题?另请参阅。它提到
-tcpAllowOthers
开关不仅在
localhost
上可见。我认为DB\u CLOSE\u DELAY=-1应该位于内存连接字符串上,而不是TCP连接字符串上,因此创建DB的命令负责控制其生存期。理想情况下,外部连接应该不知道H2的实现细节,只需要询问数据。自从我使用H2已经有一段时间了,但是我的回答的其余部分将表明我指的是TCP连接
@Bean(initMethod = "start", destroyMethod = "stop")
public Server inMemoryH2DatabaseaServer() throws SQLException {
    return Server.createTcpServer(
      "-tcp", "-tcpAllowOthers", "-tcpPort", "9090");
}