Java H2数据库自动服务器模式:通过web控制台远程访问

Java H2数据库自动服务器模式:通过web控制台远程访问,java,scala,h2,Java,Scala,H2,我对H2数据库相当陌生。作为PoC的一部分,我使用H2数据库(版本:1.4.187)模拟MS SQL Server数据库。我有一个应用程序,比如app1,它生成数据并保存到H2中。另一个应用程序app2需要从H2数据库读取数据并处理它读取的数据。我正在尝试使用自动服务器模式,这样即使一个应用程序关闭,另一个应用程序也可以读取/写入数据库 在阅读了多个示例后,我发现了如何构建h2 url,如下所示: jdbc:h2:~/datafactory;MODE=MSSQLServer;AUTO_SERVE

我对H2数据库相当陌生。作为PoC的一部分,我使用H2数据库(版本:
1.4.187
)模拟MS SQL Server数据库。我有一个应用程序,比如app1,它生成数据并保存到H2中。另一个应用程序app2需要从H2数据库读取数据并处理它读取的数据。我正在尝试使用
自动服务器模式
,这样即使一个应用程序关闭,另一个应用程序也可以读取/写入数据库

在阅读了多个示例后,我发现了如何构建h2 url,如下所示:

jdbc:h2:~/datafactory;MODE=MSSQLServer;AUTO_SERVER=TRUE;
已启用tcp和远程访问,如下所示:

org.h2.tools.Server.createTcpServer("-tcpAllowOthers","-webAllowOthers").start()
有了这个,我就可以写数据库了。现在,我想使用
h2 web控制台
应用程序读取数据。我可以从我的本地机器上做到这一点。但是,我无法理解如何从另一台机器远程连接到此数据库

我的工厂将在ubuntu机器上运行这两个应用程序,我可以在我的机器上使用web控制台监控数据。这种方法不可能吗? 我怎样才能解决这个问题


或者我需要使用服务器模式并显式启动h2服务器吗?如有任何帮助,我们将不胜感激。

默认情况下,H2数据库的远程连接将被禁用以进行保护。要启用对TCP服务器的远程访问,您需要使用选项
-tcpAllowOthers
或其他标志
-webAllowOthers
-pgAllowOthers
启动TCP服务器 .

要在启用远程连接的情况下启动Web控制台服务器(H2控制台工具)和TCP服务器,您必须使用以下内容

java -jar /path/to/h2.jar -web -webAllowOthers -tcp -tcpAllowOthers -browser

更多信息可在中找到,控制台设置可配置

不完全确定,但查看文档和之前回答的关于同一主题的其他问题,url应如下所示:

jdbc:h2:tcp://<host>:<port>/~/datafactory;MODE=MSSQLServer;AUTO_SERVER=TRUE;
jdbc:h2:tcp://://~/datafactory;模式=MSSQLServer;AUTO_SERVER=TRUE;

似乎主机可能不是本地主机,数据库可能不在内存中

是否需要H2 web控制台

您可以使用已启动的TCP服务器使用其他SQL工具。我使用squirrelsqlclient()连接到不同的数据库


如果您需要一个web界面,您可以使用Adminer(),它可以连接到不同的数据库供应商,包括MS SQL,这恰好是您运行H2的模式。有一个管理员Debian软件包应该适用于Ubuntu。

是的,我做到了。我的困惑是如何从web控制台上的远程机器访问它们。没有获得正确的Url我的h2应用程序正在ubuntu机器上运行(没有UI访问,只有ssh)。应用程序将向H2插入数据,H2是ubuntu机器中的一个本地文件。我想从我的计算机在web控制台中查看数据。您是否尝试了url
jdbc:h2:tcp://host_of_server:port/~/datafactory
?服务器系统上的防火墙配置是否正确?端口是否对另一台机器开放?尝试过,但无法访问。我没有使用服务器模式,而是使用自动混合模式。它说你可以从任何具有相同url的机器访问,但无法理解如何构建urljdbc:h2:tcp://192.168.1.50/datafactory;IGNORECASE=TRUE;AUTO_SERVER=true在H@文档中找到以下行,不支持显式客户端/服务器连接(使用jdbc:h2:tcp://或ssl://)。内存中数据库不支持此模式。。看见也许这就是你无法连接到它的原因。似乎该端口也是随机选取的。使用此功能时,默认情况下,服务器使用任何可用的TCP端口。可以使用
AUTO\u SERVER\u port
手动设置端口。尽管以下问题以一个例外开始,但它似乎正在建立连接,以便提示URL的外观。