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

Spring Boot从2.0.1升级至2.7.x时EmbeddedMongoAutoConfiguration报错

解决Spring Boot 2.7.x升级中EmbeddedMongoAutoConfiguration的条件处理错误

你遇到的错误核心原因是Spring Boot 2.7.x自带的EmbeddedMongoAutoConfiguration与flapdoodle embed mongo 3.0.0版本不兼容。flapdoodle 3.x对API做了大幅调整,而Spring Boot 2.7.x的自动配置逻辑仍基于旧版flapdoodle设计,导致条件处理失败。

解决方案

方案1:降级flapdoodle到Spring Boot 2.7.x兼容版本

Spring Boot 2.7.x的依赖管理默认适配flapdoodle 2.2.x系列,直接调整测试依赖版本即可:

<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <version>2.2.0</version>
    <scope>test</scope>
</dependency>

如果启用Spring Boot依赖管理(推荐),可以省略版本号,让框架自动匹配兼容版本:

<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <scope>test</scope>
</dependency>

方案2:禁用自动配置,手动初始化嵌入式Mongo

若坚持使用flapdoodle 3.0.0,需排除Spring Boot的自动配置类,自行编写配置逻辑:

  1. 在启动类或测试类中排除自动配置:
@SpringBootApplication(exclude = EmbeddedMongoAutoConfiguration.class)
// 测试类可替换为@SpringBootTest(exclude = EmbeddedMongoAutoConfiguration.class)
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}
  1. 编写自定义配置类,适配flapdoodle 3.x API:
import de.flapdoodle.embed.mongo.MongodExecutable;
import de.flapdoodle.embed.mongo.MongodProcess;
import de.flapdoodle.embed.mongo.MongodStarter;
import de.flapdoodle.embed.mongo.config.MongodConfig;
import de.flapdoodle.embed.mongo.config.Net;
import de.flapdoodle.embed.mongo.distribution.Version;
import de.flapdoodle.embed.process.runtime.Network;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

import java.io.IOException;

@Configuration
@Profile("test")
public class EmbeddedMongoConfig {

    private MongodProcess mongodProcess;

    @Bean(destroyMethod = "stop")
    public MongodProcess mongodProcess() throws IOException {
        MongodStarter starter = MongodStarter.getDefaultInstance();
        MongodConfig mongodConfig = MongodConfig.builder()
                .version(Version.Main.PRODUCTION)
                .net(new Net("localhost", 27017, Network.localhostIsIPv6()))
                .build();
        MongodExecutable mongodExecutable = starter.prepare(mongodConfig);
        mongodProcess = mongodExecutable.start();
        return mongodProcess;
    }
}

额外建议

你测试依赖中使用的info.cukes系列Cucumber已停止维护,建议替换为io.cucumber的兼容版本,避免和Spring Boot 2.7.x冲突:

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java</artifactId>
    <version>7.11.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-junit</artifactId>
    <version>7.11.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-spring</artifactId>
    <version>7.11.0</version>
    <scope>test</scope>
</dependency>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:25:57