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

Quarkus测试H2数据库报错:Driver不支持jdbc:h2:mem:default

解决Quarkus测试阶段H2数据库URL不支持的问题

以下是针对你遇到的问题的具体排查和解决步骤:

  • 检查测试环境配置的优先级
    确保application.properties中的测试专属配置是用%test.前缀声明的,避免全局配置覆盖测试环境设置。正确的配置示例:

    # 开发环境PostgreSQL配置
    quarkus.datasource.db-kind=postgresql
    quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/your-db
    quarkus.datasource.jdbc.driver=org.postgresql.Driver
    quarkus.datasource.username=xxx
    quarkus.datasource.password=xxx
    
    # 测试环境H2配置
    %test.quarkus.datasource.db-kind=h2
    %test.quarkus.datasource.jdbc.url=jdbc:h2:mem:default;DB_CLOSE_DELAY=-1
    %test.quarkus.datasource.jdbc.driver=org.h2.Driver
    %test.quarkus.hibernate-orm.database.generation=drop-and-create
    

    重点确认全局的quarkus.datasource.jdbc.driver没有在测试时被继承,否则会用PostgreSQL驱动去连接H2的URL,直接触发报错。

  • 校验依赖版本兼容性
    确保quarkus-jdbc-h2和quarkus-test-h2的版本与Quarkus核心版本完全一致,版本不匹配会导致驱动加载异常。建议通过Quarkus BOM统一管理版本:

    <properties>
        <quarkus.platform.version>3.2.0.Final</quarkus.platform.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.quarkus.platform</groupId>
                <artifactId>quarkus-bom</artifactId>
                <version>${quarkus.platform.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  • 强制测试类使用H2配置
    如果application.properties的配置未生效,可以通过测试配置类强制指定H2参数。创建一个测试Profile类:

    import io.quarkus.test.junit.QuarkusTestProfile;
    import java.util.Map;
    
    public class H2TestProfile implements QuarkusTestProfile {
        @Override
        public Map<String, String> getConfigOverrides() {
            return Map.of(
                "quarkus.datasource.db-kind", "h2",
                "quarkus.datasource.jdbc.url", "jdbc:h2:mem:default;DB_CLOSE_DELAY=-1",
                "quarkus.datasource.jdbc.driver", "org.h2.Driver"
            );
        }
    }
    

    然后在测试类上添加注解:@QuarkusTest @TestProfile(H2TestProfile.class),确保测试时加载H2的配置。

  • 清理依赖缓存
    执行mvn clean install -DskipTests清理项目构建缓存,重新拉取依赖。也可以手动删除本地Maven仓库中com.h2database相关的目录,避免缓存的损坏驱动包影响加载。

  • 排查扩展冲突
    检查项目中是否引入了非必要的数据源扩展(如第三方数据源插件),这类扩展可能会干扰Quarkus默认的驱动加载逻辑,测试阶段只保留quarkus-jdbc-h2和quarkus-test-h2即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:30:00