如何在没有 PG 服务器和 Web 控制台的情况下启动 H2 数据库命令行?

Posted

技术标签:

【中文标题】如何在没有 PG 服务器和 Web 控制台的情况下启动 H2 数据库命令行?【英文标题】:How to start H2 database command line without PG server and Web Console? 【发布时间】:2021-10-12 17:22:17 【问题描述】:

我在 AWS EC2 机器上拥有 H2 数据库 v1.4.199,我想通过命令行以 TCP 模式启动它,但看起来默认情况下 PG 服务器和 Web 控制台也启动,这是我不想要的.

我正在使用一个非常基本的命令来设置端口。这是命令和输出:

$ java -cp h2*.jar org.h2.tools.Server -tcpPort 9092
TCP server running at tcp://10.1.64.202:9092 (only local connections)
PG server running at pg://10.1.64.202:5435 (only local connections)
Web Console server running at http://10.1.64.202:8082 (others can connect)
Failed to start a browser to open the URL http://10.1.64.202:8082: Browser detection failed, and java property 'h2.browser' and environment variable BROWSER are not set to a browser executable.

您可以看到 PG 服务器和控制台服务器已启动,但我认为 PG 服务器和 Web 控制台是您必须显式启用的?我也确实想要到这个 H2 的外部连接(我的 Java 应用程序在同一个 EC2 上),所以看到控制台配置为输出中的“其他人可以连接”有点令人担忧。

启动 H2 以使其更受限制和更安全的正确方法是什么?

编辑:有关更多上下文,本地主机上的 Java 应用程序将使用此代码连接:

    String url = "jdbc:h2:tcp://localhost:9092/" + filePath + ";MODE=mysql;AUTO_RECONNECT=TRUE;DB_CLOSE_ON_EXIT=FALSE";

    return DataSourceBuilder.create()
        .username("sa")
        .url(url)
        .driverClassName(org.h2.Driver.class.getName()).build();

Java 应用程序连接得很好,但它不需要 PG 服务器和 Web 控制台来使其工作。

【问题讨论】:

当 java 需要 :(Windows 上为;)时,注意-cp h2*.jar 将被 shell 扩展,并用空格分隔所有 jar 文件。 仅当单个 jar 与该模式匹配时,它才会工作。 【参考方案1】:

服务器的帮助选项可能会提供一些指导:

 java -cp h2.jar org.h2.tools.Server -?

输出包括:

Starts the H2 Console (web-) server, TCP, and PG server.
Usage: java org.h2.tools.Server <options>
When running without options, -tcp, -web, -browser and -pg are started.
…

解决方法是显式启动 TCP 服务器:

java -cp h2.jar org.h2.tools.Server -tcp -tcpPort 9092

【讨论】:

谢谢你,成功了。我通读了-? 帮助,但认为-tcp 是多余的,因为我指定了tcpPort 9092,并且TCP 服务器将成功启动。 IMO 有点令人困惑,但我非常感谢您的帮助。 很高兴你把它整理好了。我是h2 的长期粉丝,我记得我也遇到过这个问题。

以上是关于如何在没有 PG 服务器和 Web 控制台的情况下启动 H2 数据库命令行?的主要内容,如果未能解决你的问题,请参考以下文章

在没有导航控制器的情况下滑动 Web 视图时如何隐藏工具栏?

如何在没有控制问题的情况下停用 ViewState

pg_dumpall 需要啥才能在没有密码的情况下工作?

如何在没有布局的情况下呈现控制器动作?

如何在没有任何附加模块的情况下在迷你 Web 服务器中返回 json?

如何在没有服务器端代码的情况下使用 Web API,只使用 Ajax