安装全新操作系统后,我正在启动我的项目,该项目通常在
127.0.0.1:9092
上启动 H2 服务器,但现在它在我的局域网的 C 类 IP 地址上启动。
除了重新安装操作系统之外,我没有进行任何更改。
我考虑了防火墙规则,因此我允许 Java 的专用和公共网络,但它没有改变任何东西。
我正在像这样启动我的 H2 服务器:
public static void start(Runnable r) {
try {
Server h2Server =
Server.createTcpServer("-tcpAllowOthers", "-tcpPort",
"9092"
);
System.out.println(h2Server.getURL());
System.out.println(h2Server.getService().getName());
h2Server.start();
if (h2Server.isRunning(true)) {
System.out.println("H2 server was started and is running.");
onShutdown = h2Server::stop;
}
else {
throw new RuntimeException("Could not start H2 server.");
}
} catch (SQLException e) {
throw new RuntimeException("Failed to start H2 server: ", e);
}
Database.onStartup = r;
applicationContext =
new SpringApplicationBuilder(Database.class)
.properties(properties()).web(WebApplicationType.NONE)
.bannerMode(Banner.Mode.OFF).run();
}
有人遇到过这个问题吗?
谢谢你的任何想法。
编辑:
控制台输出。
[INFO] --- exec:3.1.0:java (default-cli) @ launcher ---
tcp://192.168.1.36:9092 <-- it was 127.0.0.1:9092 before !!!
H2 TCP Server
H2 server was started and is running.
我在这里找到了答案:大概它绑定到它找到的第一个网络适配器,该适配器曾经是环回/本地主机设备,但现在是物理设备。您可能想查看文档以了解如何指定它绑定到的 IP 地址。
因此,我按照
docs(第 159 页)中的建议,使用系统属性
h2.bindAddress
强制指定所需的地址。
System.setProperty("h2.bindAddress", "127.0.0.1");
Server h2Server =
Server.createTcpServer("-tcp", "-tcpAllowOthers", "-tcpPort", "9092");
现在工作正常。
[INFO] --- exec:3.1.0:java (default-cli) @ launcher ---
tcp://localhost:9092
H2 TCP Server
H2 server was started and is running.