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

JHipster Spring Boot集成Oracle R2DBC报NoSuchMethodError咨询

问题根因

抛出java.lang.NoSuchMethodError: 'java.util.concurrent.Flow$Publisher oracle.jdbc.OracleConnectionBuilder.buildConnectionPublisherOracle()'的核心原因是Oracle R2DBC驱动与JDBC驱动版本不匹配:

  • 你当前使用的oracle-r2dbc 0.1.0版本依赖Oracle JDBC 21.3及以上版本才提供的buildConnectionPublisherOracle()方法
  • 你手动引入的ojdbc8 21.1.0.0版本未实现该方法,且Spring Boot 2.6.3默认管理的Oracle JDBC版本也低于21.3,就算不手动添加JDBC依赖,拉取到的传递依赖版本也不满足要求
  • Liquibase启动阶段走JDBC连接初始化数据,不会调用R2DBC驱动相关类,因此启动无报错,只有第一次发起R2DBC数据库查询、需要创建响应式连接时才会触发异常,和R2DBC连接URL的格式无关。
修复步骤
  • 替换local Maven Profile中的Oracle依赖,将oracle-r2dbc升级到1.0.0版本,所有Oracle相关依赖统一使用21.3.0.0版本,删除原有21.1.0.0版本的依赖配置,替换为如下内容:
<dependency>
    <groupId>com.oracle.database.r2dbc</groupId>
    <artifactId>oracle-r2dbc</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>21.3.0.0</version>
</dependency>
<dependency>
    <groupId>com.oracle.database.ha</groupId>
    <artifactId>ons</artifactId>
    <version>21.3.0.0</version>
</dependency>
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ucp</artifactId>
    <version>21.3.0.0</version>
</dependency>
  • 执行mvn clean install -Plocal命令重新构建,清理本地target目录与旧版本依赖缓存,避免类加载时读取到残留的旧版本jar包。
  • 保持现有application-local.yml中的R2DBC URL配置r2dbc:oracle:thin://localhost:1521/xe即可,不需要修改为冒号分隔的格式,Liquibase的JDBC连接配置也无需调整。
验证方式

应用启动后可以在启动日志中搜索ojdbc、oracle-r2dbc的版本信息,确认加载的是21.3版本的依赖包,再调用/authorities接口即可正常返回数据,不会再抛出方法不存在的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:18:25