Spring Boot连接MongoDB Atlas失败求助:昨日正常今日报错
Spring微服务连接MongoDB Atlas抛出MongoSocketReadException异常
我有一个关联MongoDB Atlas数据库的Spring微服务应用,昨日运行正常,但今日出现以下连接错误:
2022-11-24 00:29:33.267 INFO 5588 --- [ngodb.net:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server ac-bl3jxj4-shard-00-02.wt2swod.mongodb.net:27017 com.mongodb.MongoSocketReadException: Exception receiving message at com.mongodb.internal.connection.InternalStreamConnection.translateReadException(InternalStreamConnection.java:707) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:579) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:415) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:342) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.CommandHelper.sendAndReceive(CommandHelper.java:96) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.CommandHelper.executeCommand(CommandHelper.java:44) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:131) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.InternalStreamConnectionInitializer.startHandshake(InternalStreamConnectionInitializer.java:73) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:182) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.lookupServerDescription(DefaultServerMonitor.java:188) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:152) ~[mongodb-driver-core-4.4.2.jar:na] at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na] Caused by: java.net.SocketException: Socket is closed at java.base/java.net.Socket.setSoTimeout(Socket.java:1154) ~[na:na] at java.base/sun.security.ssl.BaseSSLSocketImpl.setSoTimeout(BaseSSLSocketImpl.java:637) ~[na:na] at java.base/sun.security.ssl.SSLSocketImpl.setSoTimeout(SSLSocketImpl.java:75) ~[na:na] at com.mongodb.internal.connection.SocketStream.read(SocketStream.java:133) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:718) ~[mongodb-driver-core-4.4.2.jar:na] at com.mongodb.internal.connection.InternalStreamConnection.receiveMessageWithAdditionalTimeout(InternalStreamConnection.java:576) ~[mongodb-driver-core-4.4.2.jar:na] ... 10 common frames omitted
我的application.properties配置如下:
spring.data.mongodb.uri=mongodb+srv://denver:*****@product-service.wt2swod.mongodb.net/?retryWrites=true&w=majority spring.data.mongodb.database=product-service eureka.client.fetch-registry=true eureka.client.service-url.defaultZone=http://localhost:8761/eureka spring.application.name=product-service server.port=0
已尝试添加以下配置排除Mongo自动类,但问题未解决:
@SpringBootApplication(exclude = { MongoAutoConfiguration.class, MongoDataAutoConfiguration.class })
希望得到解决该连接异常的有效方法。
解决方法
检查MongoDB Atlas IP白名单
登录Atlas控制台,进入目标集群的「Network Access」页面,确认应用服务器的公网IP已加入白名单。可临时添加0.0.0.0/0测试是否为IP限制问题,生产环境需及时收回该权限。验证连接URI正确性
从Atlas控制台重新生成标准连接字符串,核对密码(注意特殊字符需转义)、集群地址、数据库名称是否与配置文件完全一致,避免因URI拼写错误导致连接失败。排查网络连通性
在应用服务器上执行命令测试端口连通性:telnet ac-bl3jxj4-shard-00-02.wt2swod.mongodb.net 27017 # 或使用nc命令 nc -zv ac-bl3jxj4-shard-00-02.wt2swod.mongodb.net 27017确认端口未被防火墙、代理或运营商拦截。
调整MongoDB连接参数
在URI中添加超时与连接池配置,避免套接字因超时被关闭:spring.data.mongodb.uri=mongodb+srv://denver:*****@product-service.wt2swod.mongodb.net/?retryWrites=true&w=majority&connectTimeoutMS=30000&socketTimeoutMS=60000&maxPoolSize=20恢复Spring Mongo自动配置
移除@SpringBootApplication中的排除配置,让Spring自动初始化Mongo连接上下文——手动排除会导致连接池等核心组件无法正常加载。检查Atlas集群状态
登录Atlas控制台查看集群是否有维护、宕机或性能告警,确认服务端无异常。
内容的提问来源于stack exchange,提问作者oussama dariaoui
相关产品推荐
相关产品推荐

