如何在没有 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 视图时如何隐藏工具栏?