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

测试时如何在Quarkus中通过H2 Console访问内存H2数据库

解决Quarkus测试时无法访问H2 Console的问题

核心原因

Quarkus测试默认启动嵌入式服务器但不对外暴露HTTP端口,且H2 Console的Servlet在测试环境默认未启用;另外内存H2数据库默认会在测试结束后立即关闭,导致暂停时无法连接。

步骤1:配置测试环境的H2 Console与HTTP端口

修改application.yml的%test配置块,添加H2 Console启用开关、固定HTTP端口,并设置数据库延迟关闭:

%test:
  quarkus:
    datasource:
      db-kind: h2
      jdbc:
        driver: org.h2.Driver
        url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1  # 延迟关闭数据库,避免测试中途断开
    h2:
      console:
        enabled: true  # 启用测试环境的H2 Console
        path: /h2      # 控制台访问路径,和开发环境保持一致
    http:
      port: 8082       # 固定测试环境的HTTP端口,方便访问
      test-port: 8082  # 确保测试使用指定端口

步骤2:让测试进程保持运行

Quarkus测试执行完测试方法后会立即关闭服务器,所以需要在测试代码中添加阻塞逻辑,让服务器持续运行直到手动终止:

@QuarkusTest
public class YourTestClass {

    @Test
    void yourTestMethod() {
        // 你的RestAssured测试逻辑
        given()
            .when().get("/your-api-endpoint")
            .then()
            .statusCode(200);

        // 阻塞线程,保持服务器运行
        System.out.println("H2 Console可访问:http://localhost:8082/h2");
        try {
            Thread.currentThread().join();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

运行测试后,控制台会打印访问地址,此时就能正常打开H2 Console,用完手动停止测试进程即可。

步骤3:移除多余的web.xml配置

你之前在main/resources和test/resources下添加的META-INF/web.xml完全多余,Quarkus会自动处理H2 Console的Servlet注册,直接删除这些文件避免冲突。

可选:用TestProfile自定义测试配置

如果需要更灵活的测试环境隔离,可以创建TestProfile类来集中配置:

public class H2DebugTestProfile implements TestProfile {
    @Override
    public Map<String, String> getConfigOverrides() {
        Map<String, String> config = new HashMap<>();
        config.put("quarkus.h2.console.enabled", "true");
        config.put("quarkus.http.port", "8082");
        config.put("quarkus.datasource.jdbc.url", "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1");
        return config;
    }
}

然后在测试类上指定使用该Profile:

@QuarkusTest(H2DebugTestProfile.class)
public class YourTestClass {
    // 测试代码...
}

连接H2 Console的注意事项

  • 控制台登录时,JDBC URL必须和配置中的一致:jdbc:h2:mem:test
  • 默认用户名为sa,密码为空,直接登录即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:23:11