Quarkus不提供官方quarkus-jdbc-oracle扩展,需手动引入Oracle官方ojdbc驱动(如ojdbc11),并配置db-kind=oracle、匹配版本的JDBC URL及显式启用健康检查与指标。

quarkus-jdbc-oracle 依赖必须显式声明
Quarkus 不像 PostgreSQL 或 MySQL 那样为 Oracle 提供开箱即用的“零配置”驱动扩展。你不能只靠 quarkus-jdbc 通用模块,必须手动引入 Oracle 官方 JDBC 驱动或 Quarkus 兼容封装。
常见错误是直接写 quarkus-jdbc-oracle —— 这个 artifact 并不存在于官方仓库(截至 Quarkus 3.8)。正确做法是:
- 使用 Oracle 官方提供的
ojdbc11(推荐 JDK 17+ 场景)或ojdbc8(JDK 8–11),通过<scope>runtime</scope>声明 - 或选用社区维护的
io.quarkus:quarkus-jdbc-oracle(非 Red Hat 官方,需确认版本兼容性,如 3.2.x+ 可能支持) - 若用 Maven BOM 管理依赖,务必排除冲突的旧版
oracle.jdbc:ojdbc*,避免ClassNotFoundException: oracle.jdbc.driver.OracleDriver
application.properties 中 db-kind 和 JDBC URL 必须匹配 Oracle 实际版本
db-kind=oracle 是必需的,但仅设此项不够 —— Quarkus 会据此选择默认连接池行为和 SQL 方言,而 Oracle 12c、19c、21c 在 URL 格式、服务名/ SID 语法、时区处理上差异明显。
典型配置示例(Oracle 19c 使用服务名):
quarkus.datasource.oracle.db-kind=oracle quarkus.datasource.oracle.username=hr quarkus.datasource.oracle.password=hr quarkus.datasource.oracle.jdbc.url=jdbc:oracle:thin:@//localhost:1521/XE quarkus.datasource.oracle.max-pool-size=20
注意点:
由夸克扫描王提供的文件格式转换工具。当用户需要将图片、截图或扫描件转换为 Office 文档(Word/Excel)或 PDF 时,使用此技能。适用于包含复杂表格、合同或图文混排内容的图片或扫描件,可尽量还原原始版式并生成可编辑文档。即使用户未明确提到格式转换,只要用户的需求涉及将图片内容转换为可编辑文档(如 .docx、.xlsx 或 .pdf),也应触发此技能。请勿用于提取纯文本或识别文字内容、图像增强处理或从零创建文档
- URL 中
@//host:port/service_name是推荐格式;@host:port:SID在较新版本中可能触发连接失败 - 如果用的是 Oracle Cloud ATP 或 Autonomous DB,URL 必须包含 wallet(
jdbc:oracle:thin:@wallet_location),且需额外配置quarkus.datasource.oracle.jdbc.driver=oracle.jdbc.driver.OracleDriver - 未设
db-kind会导致 Quarkus 尝试推断类型失败,抛出IllegalArgumentException: Unknown database kind 'null'
Oracle 需要额外配置才能启用健康检查与指标
Oracle 数据源默认不自动注册健康检查端点(/q/health)和 Micrometer 指标(如 datasource.connections.active),因为其驱动不内置 JMX 支持,且 Agroal 连接池对 Oracle 的元数据探测较保守。
启用方式:
- 添加
quarkus-smallrye-health和quarkus-micrometer-registry-prometheus依赖 - 在
application.properties中显式开启:
quarkus.datasource.oracle.health.enabled=true quarkus.datasource.oracle.metrics.enabled=true
否则你会看到健康检查始终返回 UP(即使数据库宕机),或 Prometheus 抓取不到连接池指标 —— 这不是 bug,是 Oracle 驱动层限制导致的默认行为。
事务回滚时 Oracle 的 ORA-02091 和 ORA-02055 错误需警惕
当多个 Oracle 数据源共存(例如主库 + 只读备库),或与 Narayana 事务管理器配合使用时,容易触发分布式事务异常,典型报错:
ORA-02091: transaction rolled back and ORA-02055: distributed transaction failed- 根本原因是 Oracle 要求 XA 数据源必须配置
quarkus.datasource.oracle.xa=true,且 URL 必须含oracle.net.CONNECT_TIMEOUT和oracle.net.READ_TIMEOUT - 非 XA 场景下若误启两阶段提交(如跨数据源调用
@Transactional),Quarkus 不会拦截,Oracle 会在 commit 阶段直接报错
简单项目建议全程用非 XA 模式,仅当明确需要跨库事务时才启用 XA,并验证驱动版本是否支持 oracle.jdbc.xa.client.OracleXADataSource。

















