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

Spring 3.x集成测试:如何手动启动Embedded MongoDB 4.9.2?

适配de.flapdoodle.embed.mongo 4.9.2的嵌入式MongoDB手动启动方案

1. 确认依赖配置

首先确保测试依赖中引入对应版本的嵌入式MongoDB包,Maven配置如下:

<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <version>4.9.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

2. 手动启动嵌入式Mongo的配置类

4.9.2版本重构了API,原有的MongoStarter相关调用方式变更,以下是适配后的配置类:

import de.flapdoodle.embed.mongo.MongoDExecutable;
import de.flapdoodle.embed.mongo.MongoDStarter;
import de.flapdoodle.embed.mongo.config.IMongodConfig;
import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
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.TestConfiguration;
import org.springframework.context.annotation.Profile;
import org.springframework.data.mongodb.core.MongoTemplate;
import com.mongodb.client.MongoClients;

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

    private MongoDExecutable mongoDExecutable;

    @Bean(destroyMethod = "stop")
    public MongoDExecutable mongoDExecutable() throws Exception {
        // 构建MongoDB实例配置,可指定具体版本(如Version.V6_0_10)或用生产稳定版
        IMongodConfig mongodConfig = new MongodConfigBuilder()
                .version(Version.Main.PRODUCTION)
                .net(new Net("localhost", Network.getFreeServerPort(), Network.localhostIsIPv6()))
                .build();

        MongoDStarter starter = MongoDStarter.getDefaultInstance();
        mongoDExecutable = starter.prepare(mongodConfig);
        mongoDExecutable.start();
        return mongoDExecutable;
    }

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        int port = mongoDExecutable().getConfig().net().getPort();
        return new MongoTemplate(MongoClients.create("mongodb://localhost:" + port), "test-db");
    }
}

3. 测试类中启用配置

在你的控制器集成测试类中,通过@Import加载配置,并指定测试环境:

import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ActiveProfiles;

@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
@Import(EmbeddedMongoConfig.class)
public class YourControllerIntegrationTest {
    // 注入MockMvc或MongoTemplate编写测试逻辑
    // 示例:
    // @Autowired
    // private MockMvc mockMvc;
    //
    // @Test
    // public void testControllerEndpoint() throws Exception {
    //     // 测试代码
    // }
}

关键说明

  • @Profile("test")限定配置仅在测试环境生效,避免干扰生产环境
  • destroyMethod = "stop"保证测试结束后自动终止嵌入式Mongo进程,释放资源
  • Network.getFreeServerPort()自动分配空闲端口,避免端口冲突问题
  • 如需固定版本,将Version.Main.PRODUCTION替换为具体版本,如Version.V6_0_10

内容的提问来源于stack exchange,提问作者Ana Rodríguez Fernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:05:26