Database h2内存表中,远程连接
我在创建内存中的表、使用H2数据库以及在创建和运行它的JVM之外访问它时遇到问题 文档将url结构为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 可以找到完整的示例,并且;检查了相关示例
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");
}