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

