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
相关产品推荐
相关产品推荐

