SpringBoot 2.7.13使用嵌入式MongoDB遇连接拒绝异常求助
解决嵌入式MongoDB(de.flapdoodle)连接拒绝问题
针对你使用Spring Boot 2.7.13集成嵌入式MongoDB时遇到的连接拒绝异常,可按以下步骤排查解决:
1. 修正依赖配置,避免版本冲突
Spring Boot提供了专门的测试starter来整合嵌入式MongoDB,无需手动引入de.flapdoodle.embed.mongo和mongo-java-driver,starter会自动管理兼容版本。替换你的测试依赖为:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb-test</artifactId> <scope>test</scope> </dependency>
删除原有的de.flapdoodle.embed.mongo和mongo-java-driver依赖,避免版本不兼容导致的启动问题。
2. 调整配置项,确保版本和端口配置正确
Spring Boot 2.7.x中,嵌入式MongoDB的版本配置需使用Flapdoodle原生配置键,同时建议配置随机端口避免端口冲突:
de: flapdoodle: mongodb: embedded: version: 4.0.2 port: 0 # 使用随机端口,避免与本地Mongo或其他服务冲突
删除之前的spring.mongodb.embedded.version配置,该配置键不适用于当前Spring Boot版本的嵌入式Mongo整合。
3. 确保测试类使用正确的注解
测试类需添加@DataMongoTest注解,该注解会自动初始化嵌入式MongoDB环境,无需额外启动配置:
@DataMongoTest class YourMongoIntegrationTest { @Autowired private MongoTemplate mongoTemplate; @Test void testConnection() { // 简单测试连接:插入并查询数据 Document testDoc = new Document("name", "test"); mongoTemplate.insert(testDoc, "test_collection"); Document result = mongoTemplate.findById(testDoc.get("_id"), Document.class, "test_collection"); assert result != null; } }
如果使用@SpringBootTest,需额外确保嵌入式Mongo的自动配置生效,推荐优先使用@DataMongoTest做Mongo相关集成测试。
4. 排查启动日志,定位具体问题
运行测试时查看日志,重点关注:
- 是否有Mongo二进制文件下载失败的日志(内网环境需配置代理或手动下载二进制包到Flapdoodle默认缓存目录,一般在
~/.embedmongo/) - 是否有启动权限不足的报错(Linux/macOS下需确保下载的Mongo二进制文件有执行权限,可手动执行
chmod +x) - 是否有端口被占用的提示(即使配置随机端口,也可能存在系统端口耗尽的情况,可重启IDE或清理端口占用)
内容的提问来源于stack exchange,提问作者Jewel Jose
相关产品推荐
相关产品推荐

