Spring Boot 2.x连接MongoDB报错:MongoDbFactory已废弃如何解决
问题原因
Spring Boot 2.6.x 适配的Spring Data MongoDB版本已废弃org.springframework.data.mongodb.MongoDbFactory接口,替换为org.springframework.data.mongodb.MongoDatabaseFactory。框架自动配置阶段仅注册MongoDatabaseFactory类型的Bean,因此自定义MongoTemplate时注入旧的MongoDbFactory会触发找不到Bean的启动异常。
此外手动指定mongo-java-driver版本属于多余配置,spring-boot-starter-data-mongodb会自动引入与当前版本完全兼容的驱动,手动指定版本反而可能引发依赖冲突。
修复步骤
- 修正Maven依赖:删除手动添加的
org.mongodb:mongo-java-driver依赖,引入官方MongoDB Starter,依赖版本由Spring Boot父工程自动管理:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
- 重写MongoDB配置类:将配置中注入的
MongoDbFactory替换为MongoDatabaseFactory,其余自定义映射逻辑保持不变,完整代码如下:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.MongoDatabaseFactory; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper; import org.springframework.data.mongodb.core.convert.MappingMongoConverter; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; @Configuration public class MongoDBConfiguration { @Bean public MongoTemplate mongoTemplate(MongoDatabaseFactory mongoDbFactory, MongoMappingContext context) { MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(mongoDbFactory), context); // 去除写入MongoDB时自动添加的_class字段 converter.setTypeMapper(new DefaultMongoTypeMapper(null)); return new MongoTemplate(mongoDbFactory, converter); } }
- 原有连接配置无需调整:配置文件中
spring.data.mongodb.uri=mongodb://mypath可正常被框架读取,不需要修改。
验证结果
修改后重启项目,MongoDatabaseFactory会被Spring Boot自动配置类正常注册,自定义MongoTemplate可以完成初始化,原有去除_class字段的自定义逻辑完全保留,不影响所有MongoDB操作。
内容的提问来源于stack exchange,提问作者Atique Ahmed
相关产品推荐
相关产品推荐

