Liquibase
安装附带一个示例目录,您可以使用它来了解不同的命令。 这些示例使用 H2
数据库以及端口 9090 上的 Web 控制台。不幸的是,端口 9090 不可用。
我问如何更改由脚本启动的示例
H2
数据库使用的网络控制台端口:
start-h2
该端口似乎是由 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
文件设置或命令行选项可以更改要使用的网络控制台端口号 H2
。
我已经回答了我自己的问题,以 @RobbyCornelissen 的建议为指导,并进行了以下更新。
StartH2Main
类。dbPort
常量从 9090
更改为“可用”,例如 8092。StartH2Main
应用程序加载H2并回避.h2.server.properties
文件。StartH2Main.jar
。9090
是硬编码为 StartH2Main
。9090
是数据库端口,这意味着必须更新所有示例以匹配给定的新端口号。我个人认为任何东西,例如用于演示或教程的端口,都应该放在命令行或配置文件中。 因此,避免了耗时或不便的采用障碍。 这很有道理。 这些东西总是可以有一个默认值,请允许它们也被配置。
我也遇到了同样的问题,我通过在执行启动H2DB命令时指定端口号来解决它:
liquibase init start-h2 --web-port <your_desired_port>
将
我知道这个问题大约三年前就被问到了,但我希望它能有所帮助。