当前位置: 首页 > news >正文

Spring Boot 项目启动报错:MongoSocketOpenException 连接被拒绝排查日记

img

1. 背景及环境说明

因为业务需求,引入了一个轻量级的数据库备份组件,组件支持MySQL、MongoDB等数据源的自动数据库备份,而我只需要对MySQL数据库的数据源进行备份,当前我的项目是并没有使用MongoDB的。

引入后启动Spring Boot 项目时,控制台突然出现如下异常:

com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.ConnectException: Connection refused: connect

令人疑惑的是,项目中并没有配置任何 MongoDB 连接信息,甚至并没有打算使用 MongoDB,但应用启动还是失败了。

2. 排查思路

遇到 Connection refused,直觉是“客户端连接数据库失败”,于是按照以下步骤排查:

2.1. 确认当前项目是否使用了MongoDB

先是怀疑了一下我当前跑的这个项目是否其他人加入了MongoDB的使用,只是自己不知情。

检查了 pom.xml 中是否引入 spring-boot-starter-data-mongodb 之类的依赖,但并没有发现。

2.2. 确认 MongoDB 服务是否在运行

这一步我并没有进行,因为我的项目很确定不需要MongoDB,但如果你发现你的项目中是用到的,那就按照下面的排查步骤找一下问题。

① 服务端已启动并监听正确端口:

ps -ef | grep mongod
netstat -ano | findstr 27017

② 检查连接地址

Spring Boot 在没有配置时会默认使用 mongodb://localhost:27017。如果服务端不在本地连接会被拒绝。

③ 排查防火墙

如果 MongoDB 部署在远程服务器,在服务器端需要将开放 27017 端口,并在 mongod.conf 中允许外部访问。

2.3. 排查结果

① 项目中没有配置任何MongoDB连接;

pom.xml也没有引入spring-boot-starter-data-mongodb

3. 解决方案

3.1. 找到问题

使用IDEA中Maven Helper等插件,查看自己引入的依赖中是否关联依赖了MongoDB的相关依赖。

根据排查确实在刚用到的tworice-backup-starter依赖中依赖了mongodb-driver-sync,该依赖是为了支持能够从MongoDB数据库中读取并备份数据。

img

Spring Boot 的自动装配遵循“类路径条件 + 配置属性”原则。

只要以下两个条件满足,就会加载 MongoAutoConfiguration:

类路径上存在 com.mongodb.client.MongoClient,而在我的项目中这一类由官方驱动 mongodb-driver-sync 提供。

Spring Data MongoDB 自动配置类可用

spring-boot-autoconfigureMongoAutoConfiguration会自动扫描。

也就是说,并不需要显式依赖 spring-boot-starter-data-mongodb,只要引入了官方驱动,Spring Boot 仍然认为你要用 MongoDB,并且会:

创建 MongoClient Bean

默认连接 mongodb://localhost:27017

如果本地没有 MongoDB 服务,启动阶段就抛出 MongoSocketOpenException

3.2. 解决问题

我这里只是想使用MongoClient相关类,但不希望Spring Boot自动创建连接,所以在application.yml配置文件中禁用自动配置:

spring:autoconfigure:exclude: - org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration- org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration

或在主启动类上加注解排除配置类:

@SpringBootApplication(exclude = {MongoAutoConfiguration.class,MongoDataAutoConfiguration.class}
)
public class Application { ... }

4. 总结

症状:仅引入mongodb-driver-sync依赖也会在Spring Boot启动时自动连接MongoDB,若未启动数据库则报 Connection refused

原因:Spring Boot自动装配只要检测到类路径存在 com.mongodb.client.MongoClient,就触发 MongoAutoConfiguration

解决:不需要自动配置时,使用 spring.autoconfigure.exclude@SpringBootApplication(exclude = …) 禁用。


文章转载自:

http://f4CHO7mW.xcpft.cn
http://ZswLR4gw.xcpft.cn
http://emYlrQG1.xcpft.cn
http://LuaEPAOk.xcpft.cn
http://Ph8PgZAJ.xcpft.cn
http://X9Zq8YLe.xcpft.cn
http://8oHWNW2v.xcpft.cn
http://WE0jmOK0.xcpft.cn
http://mDaaDgMB.xcpft.cn
http://TAFqBs6u.xcpft.cn
http://3rsUaDKz.xcpft.cn
http://YUZLcrt3.xcpft.cn
http://DuyOIuGP.xcpft.cn
http://VgUJtYtL.xcpft.cn
http://Tg5goqVn.xcpft.cn
http://N6b9IWMo.xcpft.cn
http://5a2tB6Vp.xcpft.cn
http://KBhK6UQ6.xcpft.cn
http://C4Qcp4IR.xcpft.cn
http://T0Kgy7el.xcpft.cn
http://mDhIQ0uP.xcpft.cn
http://pAsi0iDE.xcpft.cn
http://foyXFdOd.xcpft.cn
http://ZuEZlrTD.xcpft.cn
http://ZTo2BIkM.xcpft.cn
http://l9UuTapy.xcpft.cn
http://KIJEpMSQ.xcpft.cn
http://wm9hq9K9.xcpft.cn
http://TYuwVmaY.xcpft.cn
http://m20JoXXL.xcpft.cn
http://www.dtcms.com/a/381583.html

相关文章:

  • OpenCV(cv2)学习笔记:从模板匹配入门到常用函数
  • FFmpeg合成mp4
  • 解决 ubuntu 重启串口号变化
  • 《算法与数据结构》第六章[第3节]:二叉树(第二部分)
  • 深入理解 Python 中的 `__call__` 方法
  • AI 智能体的定义与演进
  • 鸿蒙Next ArkWeb网页交互管理:从基础到高级实战
  • 给CentOS的虚拟机扩容
  • Redis 持久化:RDB 和 AOF 的 “爱恨情仇”
  • 多源最短路(Floyd算法
  • 【数据结构——图(例图篇)】
  • 安卓俄罗斯方块,经典拖动双模式体验
  • 21th cpp think
  • 收集飞花令碎片——C语言关键字typedef
  • Python/JS/Go/Java同步学习(第十二篇)四语言“字符串填充编号“对照表: 财务“小南“纸式填充术加凭证编号崩溃(附源码/截图/参数表/避坑指南)
  • 工具变量-5G试点城市DID数据(2014-2025年
  • 金融数学专业需要学哪些数学和编程内容?
  • 【算法】【链表】148.排序链表--通俗讲解
  • Linux 内核镜像与启动组件全解析:从 vmlinux 到 extlinux.conf
  • HIS架构智能化升级编程路径:从底层原理到临床实践的深度解析(上)
  • leetcode-加油站
  • Coze源码分析-资源库-创建知识库-前端源码-总结
  • 【PHP7内核剖析】-1.2 执行流程
  • Java 多线程进阶(四)-- 锁策略,CAS,synchronized的原理,JUC当中常见的类
  • 从ENIAC到Linux:计算机技术与商业模式的协同演进
  • UE5版本Windows构建pc平台报错googletest的问题记录
  • 【LeetCode】杨辉三角,轮转数组,洗牌算法
  • 5.Three.js 学习(基础+实践)
  • 在 React 中如何使用 useMemo 和 useCallback 优化性能?
  • C++20多线程新特性:更安全高效的并发编程