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

Quarkus与JDBI集成报错:@Default修饰的javax.sql.DataSource依赖不满足

问题根因

Quarkus 2.x 调整了扩展扫描与JDBC数据源的初始化逻辑:

  • 2.1.3.Final版本中,仅将JDBC驱动依赖设为runtimeOnly时,构建阶段的Arc容器扫描无法检测到JDBC扩展,不会自动初始化默认DataSource的Bean,因此注入时报找不到依赖的错误。
  • 2.2.1.Final版本修复了主程序启动时的扩展扫描逻辑,但测试环境的类加载逻辑独立,依旧会出现扫描不到JDBC扩展的问题。
    1.13.x版本未做上述逻辑调整,因此配置可以正常运行。

解决方案

方案1:调整JDBC依赖的scope

将JDBC驱动的依赖从runtimeOnly修改为implementation,让构建阶段可以检测到JDBC扩展,自动初始化DataSource:

dependencies {
  implementation(enforcedPlatform("io.quarkus:quarkus-universe-bom:2.2.1.Final"))
  implementation(enforcedPlatform("org.jdbi:jdbi3-bom:3.21.0"))

  implementation("org.jdbi:jdbi3-core")
  implementation("org.jdbi:jdbi3-sqlobject")
  // 修改此处依赖scope
  implementation("io.quarkus:quarkus-jdbc-h2")

  runtimeOnly("io.quarkus:quarkus-config-yaml")
  runtimeOnly("io.quarkus:quarkus-flyway")
  ...
}

方案2:强制开启JDBC支持

如果不想调整依赖scope,可在配置文件中添加配置强制启用JDBC支持:

quarkus:
  datasource:
    db-kind: "h2"
    jdbc:
      enabled: true # 新增此行配置
      url: "jdbc:h2:mem:java_quarkus_graphql;DB_CLOSE_DELAY=-1;MODE=PostgreSQL"
    username: "sa"
  flyway:
    clean-disabled: true
    locations: "classpath:database/migration"
    migrate-at-start: true
    validate-on-migrate: true

测试场景额外排查项

如果调整后主程序正常但测试依旧报错,检查以下两项:

  • 确认src/test/resources下存在正确的数据源配置文件,测试环境默认优先读取该目录下的配置。
  • 确认自定义@QuarkusTransactionalTest注解中的@Transactional导入的是javax.transaction.Transactional,而非Spring框架的事务注解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:18:03