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

Spring Boot测试API时如何配置独立的第二套H2数据库

Spring Boot 测试环境独立H2数据库配置方案

1. 依赖确认

首先确保项目中已经引入H2数据库和测试相关依赖,Maven配置参考:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

如果用Gradle,对应添加testImplementation的相关依赖即可。

2. 测试专属配置文件

在src/test/resources目录下创建测试环境专属配置文件application-test.yml(或properties格式),配置独立的H2数据源:

spring:
  datasource:
    # 内存模式H2,每次启动都是全新数据库,进程关闭后自动销毁
    url: jdbc:h2:mem:test_controller_db;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
    driver-class-name: org.h2.Driver
    username: sa
    password: ""
  # 自动执行测试初始化SQL,文件放在src/test/resources下即可
  sql:
    init:
      mode: always
      schema-locations: classpath:test-schema.sql
      data-locations: classpath:test-data.sql
  # 可选:开启H2控制台,测试时可访问localhost:端口/h2-console查看数据
  h2:
    console:
      enabled: true

注意这里的H2连接地址要和开发环境的H2地址完全区分,避免和开发库冲突。


3. 测试类适配

在Controller测试类上添加对应注解,指定激活测试配置,使用独立的H2数据源:

// 针对Controller层的测试用@WebMvcTest,全链路测试用@SpringBootTest
@WebMvcTest(YourController.class)
@ActiveProfiles("test") // 激活test配置,使用测试环境的H2数据源
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) // 禁用默认的测试数据源替换逻辑,使用自定义的H2配置
public class YourControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testYourInterface() throws Exception {
        // 接口测试逻辑示例
        mockMvc.perform(get("/your/api/path"))
                .andExpect(status().isOk());
    }
}

4. 可选增强配置

如果需要更高的测试隔离度,保证每个测试方法执行时都是完全干净的数据库,可以在测试类上添加注解:

@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)

如果不需要全局的初始化SQL,也可以单独在测试方法上加@Sql注解指定单次测试需要执行的SQL脚本:

@Test
@Sql("/single-test-data.sql")
public void testSpecialCase() throws Exception {
    // 测试逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:09:04