You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring测试中Embedded MongoDB无法启动报连接被拒错误如何解决?

问题排查及解决方法

核心问题原因

  • 测试类中排除了MongoReactiveDataAutoConfiguration,直接导致Spring Boot的嵌入式MongoDB自动配置逻辑失效,嵌入式Mongo实例根本没有被启动,自然会出现连接被拒绝的报错。
  • YAML配置存在层级错误、多余启动限制配置的问题,也会导致嵌入式Mongo启动失败。

具体解决步骤

  1. 修改测试类注解,移除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(){
      
    }
}
  1. 修正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
  1. 检查依赖版本兼容性
    如果使用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>
  1. 排查端口占用
    启动测试前确认27019端口未被其他进程占用,Windows可执行netstat -ano | findstr 27019,Linux/Mac可执行lsof -i:27019检查端口占用情况。

内容的提问来源于stack exchange,提问作者jackjackjack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 20:57:03