本文详细解决 Spring Boot 项目未配置 MongoDB 却启动报 com.mongodb.MongoSocketOpenException: Connection refused 问题,分析 mongodb-driver-sync 依赖触发自动装配原因,提供禁用 MongoAutoConfiguration 的两种方案,助开发者快速排查类似异常。
一、背景及环境说明
因业务需求,项目引入一款轻量级数据库备份组件(支持 MySQL、MongoDB 等数据源自动备份),但实际仅需备份 MySQL 数据库,且项目本身未使用 MongoDB。
然而,引入该组件后启动 Spring Boot 项目,控制台突然抛出如下异常,导致应用启动失败:
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.ConnectException: Connection refused: connect
令人疑惑的是,项目中未配置任何 MongoDB 连接信息,也无使用 MongoDB 的计划,却出现此连接异常。
二、排查思路
遇到“Connection refused”异常,直观判断为“客户端连接数据库失败”,按以下步骤逐步排查:
2.1 确认当前项目是否使用 MongoDB
首先怀疑项目中是否有其他人添加了 MongoDB 相关使用(自己未察觉),通过检查 pom.xml 文件,确认是否引入 spring-boot-starter-data-mongodb 等 MongoDB 相关依赖,最终未发现此类依赖。
2.2 确认 MongoDB 服务是否在运行
由于本项目明确无需 MongoDB,未执行此步骤,但若你的项目实际需使用 MongoDB,可按以下流程排查:
① 检查服务端是否启动并监听正确端口:
# 查看 MongoDB 进程
ps -ef | grep mongod
# 检查 27017 端口监听情况(MongoDB 默认端口)
netstat -ano | findstr 27017
② 验证连接地址:Spring Boot 在未配置 MongoDB 连接地址时,默认使用 mongodb://localhost:27017,若 MongoDB 服务端不在本地,会出现连接拒绝。
③ 排查防火墙:若 MongoDB 部署在远程服务器,需在服务器端开放 27017 端口,并在 mongod.conf 配置中允许外部访问。
2.3 排查结果
① 项目未配置任何 MongoDB 连接信息;
② pom.xml 未引入 spring-boot-starter-data-mongodb 依赖。
三、解决方案
3.1 定位问题根源
通过 IDEA 的 Maven Helper 等插件分析项目依赖,发现新引入的 tworice-backup-starter 依赖中,关联依赖了 mongodb-driver-sync(该依赖用于支持 MongoDB 数据库备份)。

Spring Boot 自动装配遵循“类路径条件 + 配置属性”原则,只要满足以下两个条件,就会加载 MongoAutoConfiguration:
① 类路径存在 com.mongodb.client.MongoClient 类(本项目中由 mongodb-driver-sync 依赖提供);
② Spring Data MongoDB 自动配置类可被 spring-boot-autoconfigure 的 MongoAutoConfiguration 自动扫描。
这意味着,无需显式引入 spring-boot-starter-data-mongodb,只要类路径存在 mongodb-driver-sync 依赖,Spring Boot 就会默认认为需要使用 MongoDB,并执行以下操作:
- 创建 MongoClient Bean;
- 默认连接 mongodb://localhost:27017;
- 若本地无 MongoDB 服务,启动阶段就会抛出 MongoSocketOpenException。
3.2 解决问题(禁用 MongoDB 自动配置)
若仅需保留 MongoClient 相关类,无需 Spring Boot 自动创建 MongoDB 连接,可通过以下两种方式禁用自动配置:
方式一:在 application.yml 配置文件中添加排除配置
spring:
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration
- org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration
方式二:在项目主启动类上通过注解排除配置类
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoDataAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(
exclude = {
MongoAutoConfiguration.class,
MongoDataAutoConfiguration.class
}
)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
四、总结
4.1 问题症状
仅引入 mongodb-driver-sync 依赖,未配置 MongoDB 相关信息,Spring Boot 启动时仍会自动连接 MongoDB,若本地未启动 MongoDB 服务,就会报“Connection refused”异常。
4.2 根本原因
Spring Boot 自动装配机制中,只要检测到类路径存在 com.mongodb.client.MongoClient 类(由 mongodb-driver-sync 依赖提供),就会触发 MongoAutoConfiguration 自动配置。
4.3 核心解决方法
无需 MongoDB 自动配置时,通过 spring.autoconfigure.exclude 配置或 @SpringBootApplication(exclude = …) 注解,排除 MongoAutoConfiguration 和 MongoDataAutoConfiguration 即可。