Java JDBC连接PostgreSQL时出现Socket超时异常求助
PostgreSQL JDBC连接超时(SocketTimeoutException)排查方案
从报错信息看,核心是java.net.SocketTimeoutException: connect timed out,说明应用虚拟机无法建立到PostgreSQL服务器的TCP连接,而非PostgreSQL的认证或配置问题(你已确认pgAdmin能正常连接,pg_hba.conf和listen_addresses配置正确)。按以下步骤排查:
测试应用到数据库的网络连通性
在应用虚拟机上执行以下命令:- 测试IP可达性:
ping 192.168.44.38,如果丢包或无响应,说明两台机器网络不通 - 测试端口开放情况:
telnet 192.168.44.38 5432或nc -zv 192.168.44.38 5432,如果无法连接,说明5432端口被拦截
- 测试IP可达性:
检查数据库服务器的防火墙/安全组
确认数据库虚拟机的本地防火墙(如iptables、firewalld)是否允许192.168.14.147访问5432端口:- 对于firewalld:
firewall-cmd --list-all,查看是否有postgresql服务或自定义的5432端口规则,源地址包含192.168.14.147 - 对于iptables:
iptables -L -n,检查INPUT链是否有允许5432端口的规则
- 对于firewalld:
验证PostgreSQL监听状态
在数据库服务器上执行ss -tulpn | grep postgres,确认输出中包含0.0.0.0:5432或:::5432,确保PostgreSQL确实在监听所有地址的5432端口检查应用虚拟机的网络限制
确认应用机器是否有出站防火墙规则,禁止访问5432端口;同时检查路由表,确保应用机器能正确路由到192.168.44.38网段临时调整JDBC连接超时参数(可选)
如果网络存在轻微延迟,可尝试在连接串中延长超时时间:String postgresConnectionUrl = "jdbc:postgresql://192.168.44.38:5432/my_db?connectTimeout=30000&socketTimeout=60000";注意:这只是临时 workaround,核心解决方向还是修复网络连通问题
内容的提问来源于stack exchange,提问作者RIP
相关产品推荐
相关产品推荐

