Spring Data MongoDB:webSecurityConfiguration Bean创建失败依赖问题求助
1. 核心问题定位
报错缺少com/mongodb/connection/StreamFactory类本质是MongoDB Java驱动版本不兼容,Spring Data MongoDB对MongoDB驱动有严格的版本匹配要求,当驱动版本过低或与Spring Boot/Spring Data版本不匹配时,会出现这类类缺失问题。
同时要求提供mongoTemplate,是因为Spring Data MongoDB默认自动配置需要正确的驱动依赖来自动创建MongoClient、MongoTemplate等Bean,依赖缺失导致自动配置失效,进而影响Repository和WebSecurityConfiguration的Bean创建。
2. 具体修复步骤
(1)确认依赖版本匹配
检查你的pom.xml(Maven)或build.gradle(Gradle)中Spring Boot与MongoDB驱动的版本对应关系:
- 如果使用Spring Boot Starter,直接引入
spring-boot-starter-data-mongodb即可,它会自动管理兼容的MongoDB驱动版本,无需单独引入mongodb-driver-sync或mongodb-driver-core:
<!-- Maven --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
// Gradle implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
- 若手动指定版本,遵循官方匹配规则:Spring Boot 2.x对应MongoDB驱动3.x,Spring Boot 3.x对应MongoDB驱动4.x+,确保版本完全匹配。
(2)移除冲突/多余依赖
如果之前手动引入了mongodb-driver、mongodb-driver-core等单独依赖,直接删除,避免版本冲突。
(3)验证自动配置是否生效
无需自定义MongoDBConfiguration,Spring Boot会自动读取配置文件中的MongoDB参数来创建MongoClient和MongoTemplate:
# application.properties spring.data.mongodb.uri=mongodb://localhost:27017/your-database-name # 或拆分配置 spring.data.mongodb.host=localhost spring.data.mongodb.port=27017 spring.data.mongodb.database=your-database-name
(4)Repository层规范
确保你的Repository接口正确继承MongoRepository或CrudRepository,Spring Data会自动实现代理类,无需手动注入mongoTemplate(除非需自定义复杂查询):
import org.springframework.data.mongodb.repository.MongoRepository; import your.domain.model.YourEntity; public interface YourEntityRepository extends MongoRepository<YourEntity, String> { // 自定义查询方法 }
(5)清理并重建项目
- 执行
mvn clean install(Maven)或gradle clean build(Gradle),清理旧的依赖缓存。 - 重启应用,检查Bean创建是否正常。
3. DDD限界上下文目录规范补充
针对你的DDD架构,建议按限界上下文划分目录,每个上下文包含独立的领域模型、Repository、应用服务:
src/main/java/com/yourcompany/context1/domain/model/:实体、值对象、聚合根infrastructure/repository/:MongoDB Repository实现(若需自定义)application/service/:应用服务
src/main/java/com/yourcompany/context2/:同理划分其他限界上下文
这样可以避免跨上下文的依赖混乱,也符合Spring Data自动扫描Repository的规则(确保Repository在Spring Boot主类的扫描包范围内)。
内容的提问来源于stack exchange,提问作者Juan Fabritzzio Pescoran Angul

