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
- 手动配置
SessionFactoryBean无法解决,怀疑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
相关产品推荐
相关产品推荐

