Spring Boot连接MongoDB集群报MongoSocketException问题求助
Spring Boot连接MongoDB集群报错UnknownHostException的解决方案
问题核心
报错com.mongodb.MongoSocketException: ip1: nodename nor servname provided, or not known本质是Java无法解析MongoDB集群节点的IP/主机名,导致无法建立网络连接。
解决方案
验证节点网络可达性
在Spring Boot服务所在机器上,执行ping ip1、ping ip2、ping ip3测试每个集群节点的连通性:- 若ping不通,检查集群节点防火墙是否开放27017端口,同时确认服务机器与MongoDB集群处于同一网络或路由配置正确。
- 若使用主机名而非IP,在服务机器的hosts文件添加映射(Linux路径
/etc/hosts,Windows路径C:\Windows\System32\drivers\etc\hosts),示例:192.168.xx.xx ip1 192.168.xx.xy ip2 192.168.xx.xz ip3
修正MongoDB URI配置
- 替换URI中的占位符
ip1、ip2、ip3为集群节点真实的可访问IP或主机名。 - 若用户名/密码包含特殊字符(如@、&),需进行URL编码(例如
@转义为%40)。 - 先简化URI测试单节点连通性:
mongodb://user:paswd@ip1:27017/dbname?authSource=admin,确认单节点可连接后再恢复集群配置。
- 替换URI中的占位符
检查MongoDB副本集配置
登录集群主节点,执行rs.status()命令查看副本集成员配置:- 确保成员的
host字段是服务机器可解析的外部IP/域名,避免使用集群内部私有主机名。 - 若成员配置为内部主机名,需修改副本集成员地址为外部可访问地址,或在服务机器hosts文件添加对应映射。
- 确保成员的
排查Java网络配置
- 检查JVM启动参数是否设置了自定义DNS服务器,确保该DNS能正确解析集群节点地址。
- 添加JVM参数
-Djava.net.preferIPv4Stack=true禁用IPv6,部分环境下IPv6解析会引发该异常。
内容的提问来源于stack exchange,提问作者jatin
相关产品推荐
相关产品推荐

