Mybatis 启动时遇到"Caused by: java.net.UnknownHostException: localhost",为什么?

Mybatis runs into "Caused by: java.net.UnknownHostException: localhost" on start up, why?

我正在 mac 上尝试连接本地 postgresql 服务器的简单 mybatis 示例代码。我用我自己的 java jdbc 测试代码测试了服务器连接,发现一切正常。

然后我的Intellij mybatis maven项目配置为"resources/postgres.properties"

jdbc.driver="org.postgresql.Driver"
jdbc.url="jdbc:postgresql://localhost:5432/postgres"
jdbc.username="postgres"
jdbc.password="password"

这是适用于我的 jdbc 测试代码的配置,我的 "resources/mybatis.cfg.xml" 有:

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="org.postgresql.Driver" />
            <property name="url" value="jdbc:postgresql:/localhost:5432/postgres" />
            <property name="username" value="postgres" />
            <property name="password" value="password" />
        </dataSource>
    </environment>
</environments>

然后在我的 mybatis 程序中,在调用 mapper 函数时它给出 org.apache.ibatis.exceptions.PersistenceException:

Caused by: java.net.UnknownHostException: localhost
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.postgresql.core.PGStream.<init>(PGStream.java:70)
at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:91)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
... 25 more

找了一段时间,都说是因为我的/etc/hosts没有localhost配置。但实际上我有这两行:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 localhost localhost.localdomain localhost6 localhost6.localdomain6

在我的 intellij 环境中,我已经 "Project structure->libraries->" 将我的 postgre 驱动程序添加到我的项目中。

看来不是localhost配置问题。哪里会出现异常,如何排查和解决?

谢谢!

Postgres 驱动程序添加到 class 路径中(堆栈跟踪中出现的 org.postgresql.core.PGStream class 属于 postgres 驱动程序,因此很明显)。

现在,它可能仍然是一个网络问题,作为第一手段,我建议即使没有 mybatis/postgres 安装也检查你的程序

尝试打开一个 url 到本地主机的连接和一些肯定打开的端口)并查看应用程序的 "main" 方法会发生什么。

您也可以尝试使用 127.0.0.1 而不是 "localhost"

如果你看到本地主机不可用,那肯定是配置问题,否则也可能是其他问题。

根据你的描述,这听起来确实像是一个 network/configuration 问题,但由于它是一个 "troubleshooting" 问题,我只是想提供 "troubleshooting" 个想法...