如何更改 Liquibase 示例指定的 H2 数据库控制台端口号?

how to change the H2 database console port number specified by Liquibase example?

Liquibase 安装附带一个示例目录,您可以使用它来了解不同的命令。这些示例在端口 9090 上使用带有 Web 控制台的 H2 数据库。不幸的是,端口 9090 不可用。

我在问如何更改由脚本启动的示例 H2 数据库使用的 Web 控制台端口:

端口似乎由 Liquibase liquibase.example.StartH2Main 模块本身指定。 H2 似乎不受以下更改的影响:$HOME/.h2.server.properties ...

java -cp h2-1.4.200.jar:liquibase.jar liquibase.example.StartH2Main
Starting Example H2 Database...
NOTE: The database does not persist data, so stopping and restarting this process will reset it back to a blank database

java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at liquibase.example.StartH2Main.startTcpServer(StartH2Main.java:74)
    at liquibase.example.StartH2Main.main(StartH2Main.java:28)
Caused by: org.h2.jdbc.JdbcSQLNonTransientConnectionException: Exception opening port "9090" (port may be in use), cause: "java.net.BindException: Address already in use" [90061-200]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:622)
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
    at org.h2.message.DbException.get(DbException.java:194)
    at org.h2.util.NetUtils.createServerSocketTry(NetUtils.java:180)
    at org.h2.util.NetUtils.createServerSocket(NetUtils.java:146)
    at org.h2.server.TcpServer.start(TcpServer.java:245)
    at org.h2.tools.Server.start(Server.java:511)

我希望有一个 .properties 文件设置或命令行选项可以更改要使用的 Web 控制台端口号 H2

我已经根据@RobbyCornelissen 的建议回答了我自己的问题,并进行了以下更新。

  1. StartH2Mainclass.
  2. 完全可以搭建
  3. dbPort 常量从 9090 更改为“可用”,例如 8092。
  • StartH2Main 应用加载 H2 并回避 .h2.server.properties 文件。
  1. 为自己打造一个StartH2Main.jar
  • 9090StartH2Main 的硬编码。
  • 端口 9090 是数据库端口,这意味着必须更新所有示例以匹配给定的新端口号。

我个人觉得任何东西,比如用于演示或教程的端口,都应该是我可以放在命令行或配置文件中的东西。因此,避免了耗时或不方便的采用障碍。这是有道理的。这些东西总是可以有一个默认值,请允许它们也被配置。