H2 数据库突然在公共本地主机地址而不是本地主机上运行

问题描述 投票:0回答:1

安装全新操作系统后,我正在启动我的项目,该项目通常在

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.
h2
1个回答
0
投票

我在这里找到了答案:大概它绑定到它找到的第一个网络适配器,该适配器曾经是环回/本地主机设备,但现在是物理设备。您可能想查看文档以了解如何指定它绑定到的 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.
© www.soinside.com 2019 - 2024. All rights reserved.