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" 个想法...
我正在 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" 个想法...