Quarkus集成OpenTelemetry时Liquibase驱动识别报错求助
问题根源
- 自定义LiquibaseRunner未适配OpenTelemetry代理JDBC URL格式:Liquibase默认从JDBC URL推断驱动类,但
jdbc:otel:开头的URL是OpenTelemetry的代理格式,自定义Runner的逻辑没法识别这种格式背后的实际PostgreSQL驱动,也没正确加载指定的io.opentelemetry.instrumentation.jdbc.OpenTelemetryDriver,因此抛出驱动类识别失败的异常。 - 自定义Runner绕过了Quarkus原生集成逻辑:Quarkus官方的Liquibase扩展已经和OpenTelemetry JDBC instrumentation做了适配,能自动解析代理URL、加载代理驱动并关联实际数据库驱动,而自定义Runner脱离了这个上下文,没有利用Quarkus的配置加载和驱动管理机制。
标准处理方式
优先使用Quarkus原生Liquibase配置(推荐)
直接在application.properties中配置Liquibase参数,无需自定义Runner:
# 数据库连接配置 quarkus.datasource.jdbc.url=jdbc:otel:postgresql://localhost:5432/sampledb quarkus.datasource.jdbc.driver=io.opentelemetry.instrumentation.jdbc.OpenTelemetryDriver # Liquibase配置 quarkus.liquibase.change-log=db/changelog/db.changelog-master.yaml quarkus.liquibase.enabled=true
Quarkus会自动处理代理驱动的加载、URL解析,以及Liquibase的初始化执行,完全适配OpenTelemetry集成场景。
若必须使用自定义LiquibaseRunner
- 显式指定驱动类:在Runner代码中不要依赖Liquibase的URL自动推断,直接设置驱动类为
io.opentelemetry.instrumentation.jdbc.OpenTelemetryDriver。 - 依赖Quarkus配置上下文:通过
@ConfigProperty注入数据库URL、驱动类等参数,而非硬编码,确保和Quarkus的整体配置一致。 - 确保依赖完整:项目中必须引入
quarkus-opentelemetry-jdbc扩展,保证OpenTelemetry JDBC代理驱动的类能被正确加载到类路径中。
内容的提问来源于stack exchange,提问作者Kavishka Madhushan
相关产品推荐
相关产品推荐

