首页 > 解决方案 > Mybatis 启动时遇到“Caused by: java.net.UnknownHostException: localhost”,为什么?

问题描述

我在连接本地 postgresql 服务器的 mac 上尝试一个简单的 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 环境中,我已经完成了“项目结构->库->”将我的 postgre 驱动程序添加到我的项目中。

所以这似乎不是本地主机配置问题。异常可能来自哪里,我该如何排除故障和解决它?

谢谢!

标签: javapostgresqlexceptionlocalhostmybatis

解决方案


Postgres 驱动程序被添加到类路径中(出现在堆栈跟踪中的 org.postgresql.core.PGStream 类属于 postgres 驱动程序,因此它显然存在)。

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

尝试打开到 localhost 的 url 连接和一些肯定打开的端口)并查看应用程序的“main”方法会发生什么。

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

如果您看到 localhost 不可用,那么肯定是配置问题,否则也可能出现其他问题。

根据您的描述,这听起来确实像是网络/配置问题,但由于它是一个“疑难解答”问题,我只是想提供“疑难解答”的想法......


推荐阅读