Spring测试中Embedded MongoDB无法启动报连接被拒错误如何解决?
问题排查及解决方法
核心问题原因
- 测试类中排除了
MongoReactiveDataAutoConfiguration,直接导致Spring Boot的嵌入式MongoDB自动配置逻辑失效,嵌入式Mongo实例根本没有被启动,自然会出现连接被拒绝的报错。 - YAML配置存在层级错误、多余启动限制配置的问题,也会导致嵌入式Mongo启动失败。
具体解决步骤
- 修改测试类注解,移除Mongo自动配置的排除逻辑
将测试类上@ComponentScan的排除过滤器删掉,恢复Spring Boot对MongoDB的自动配置能力:
@ExtendWith(SpringExtension.class) @SpringBootTest @ActiveProfiles("test") @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @EnableReactiveMongoRepositories @Slf4j public class MyServiceTest { @Autowired private MyService myService; @Test public void saveDataOnMongoTest(){ } }
- 修正YAML配置
首先确保所有Mongo配置都在spring层级下,其次删除多余的限制类启动参数:
spring: data: mongodb: uri: mongodb://localhost:27019/myDb database: myDb port: 27019 # embedded test purpose repositories: type: reactive jpa: repositories: enabled: true mongodb: embedded: version: 4.0.3 # 删掉only_with_ssl、only_windows_2008_server这两个限制参数,前者要求客户端走SSL连接,后者限制只能在Windows 2008系统启动,都会导致启动失败 features: sync_delay,no_http_interface_arg
- 检查依赖版本兼容性
如果使用Spring Boot 2.x,可指定适配的嵌入式Mongo依赖版本:
<dependency> <groupId>de.flapdoodle.embed</groupId> <artifactId>de.flapdoodle.embed.mongo</artifactId> <version>3.4.1</version> <scope>test</scope> </dependency>
如果使用Spring Boot 3.x,需要使用新版适配的依赖坐标:
<dependency> <groupId>de.flapdoodle.embed</groupId> <artifactId>de.flapdoodle.embed.mongo.spring30x</artifactId> <version>4.6.1</version> <scope>test</scope> </dependency>
- 排查端口占用
启动测试前确认27019端口未被其他进程占用,Windows可执行netstat -ano | findstr 27019,Linux/Mac可执行lsof -i:27019检查端口占用情况。
内容的提问来源于stack exchange,提问作者jackjackjack
相关产品推荐
相关产品推荐

