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

Spring Webflux项目整合Hibernate-Reactive与R2DBC遇多类问题求助

问题:Spring Webflux + R2DBC 整合 Hibernate-Reactive 与 OracleDB 遇到的依赖及连接问题

项目环境

  • 技术栈:Spring-Webflux + R2DBC
  • 数据库:OracleDB 19c(后续测试OracleDB 21.3c Docker容器)
  • 目标:引入Hibernate-Reactive(搭配vertx-oracle驱动)与R2DBC共存

1. 启动时ClassNotFoundException 缺失MutationExecutorService

启动应用直接抛出类缺失错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/hibernate/engine/jdbc/mutation/spi/MutationExecutorService
    at org.hibernate.reactive.provider.impl.ReactiveServiceInitiators.buildInitialServiceInitiatorList(ReactiveServiceInitiators.java:122)
    at org.hibernate.reactive.provider.impl.ReactiveServiceInitiators.<clinit>(ReactiveServiceInitiators.java:60)
    at org.hibernate.reactive.provider.ReactiveServiceRegistryBuilder.defaultReactiveInitiatorList(ReactiveServiceRegistryBuilder.java:135)
    at org.hibernate.reactive.provider.ReactiveServiceRegistryBuilder.forJpa(ReactiveServiceRegistryBuilder.java:46)
    at org.hibernate.reactive.provider.impl.ReactiveEntityManagerFactoryBuilder.getStandardServiceRegistryBuilder(ReactiveEntityManagerFactoryBuilder.java:39)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:249)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:189)
    at org.hibernate.reactive.provider.impl.ReactiveEntityManagerFactoryBuilder.<init>(ReactiveEntityManagerFactoryBuilder.java:33)
    at org.hibernate.reactive.provider.ReactivePersistenceProvider.getEntityManagerFactoryBuilder(ReactivePersistenceProvider.java:151)
    at org.hibernate.reactive.provider.ReactivePersistenceProvider.getEntityManagerFactoryBuilderOrNull(ReactivePersistenceProvider.java:102)
    at org.hibernate.reactive.provider.ReactivePersistenceProvider.createEntityManagerFactory(ReactivePersistenceProvider.java:50)
    at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)
    at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at org.hibernate.reactive.example.nativesql.Main.main(Main.java:38)
Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.jdbc.mutation.spi.MutationExecutorService
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 14 more

Process finished with exit code 1
  • 当时使用hibernate-reactive-core:2.2.0.Final依赖,官方示例项目也出现相同错误,排除R2DBC影响
  • 尝试手动添加依赖解决类缺失:
<dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>6.4.0.Final</version>
</dependency>

但添加后所有Hibernate会话出现连接超时


2. 调整依赖版本后的连接超时问题

改用官方推荐的依赖组合(hibernate-core:6.3.2.Final + hibernate-reactive-core:2.1.0.Final),Spring启动冻结数秒后抛出:

Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: io.vertx.core.impl.NoStackTraceThrowable: Timeout
  • 手动配置SessionFactory Bean无法解决,怀疑vertx-oracle驱动存在通用问题

3. OracleDB 21.3c测试情况

切换到OracleDB 21.3c(Docker容器)后连接成功,但出现DDL执行警告:

WARN  vert.x-eventloop-thread-0 org.hibernate.reactive.provider.service.ReactiveGenerationTarget HR000021: DDL command failed [java.lang.NoClassDefFoundError: oracle/jdbc/OracleCommonPreparedStatement]
  • 添加com.oracle.database.jdbc:ojdbc11:23.2.0.0依赖解决了该DDL问题

核心需求

目前仍需解决Hibernate-Reactive与R2DBC在Spring Webflux项目中共存的核心问题,寻求相关实践经验与配置建议

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:22:08