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

配置hibernate-orm-panache-kotlin与反应式PostgreSQL数据源报错求助

问题:Hibernate ORM Panache Kotlin 无法配合反应式PostgreSQL数据源使用

问题背景

尝试搭建hibernate-orm-panache-kotlin与反应式PostgreSQL数据源的环境,使用io.quarkus.hibernate.orm.panache.kotlin.PanacheRepositoryBase持久化数据时,抛出如下异常:

2022-09-16T12:46:44.287898821Z 2022-09-16 12:46:44,282 ERROR [org.jbo.res.rea.com.cor.AbstractResteasyReactiveContext] (vert.x-eventloop-thread-4) Request failed: java.lang.IllegalStateException: The named datasource 'default-reactive' has not been properly configured. See https://quarkus.io/guides/datasource#multiple-datasources for information on how to do that.
2022-09-16T12:46:44.287979236Z  at io.quarkus.hibernate.orm.panache.common.runtime.AbstractJpaOperations.getEntityManager(AbstractJpaOperations.java:76)
2022-09-16T12:46:44.287991304Z  at io.quarkus.hibernate.orm.panache.common.runtime.AbstractJpaOperations.getEntityManager(AbstractJpaOperations.java:51)
2022-09-16T12:46:44.287995544Z  at io.quarkus.hibernate.orm.panache.common.runtime.AbstractJpaOperations.persist(AbstractJpaOperations.java:93)
2022-09-16T12:46:44.287999109Z  at io.quarkus.hibernate.orm.panache.kotlin.PanacheRepositoryBase$DefaultImpls.persistAndFlush(PanacheRepositoryBase.kt:61)
2022-09-16T12:46:44.288002631Z  at com.payxpert.exchangerate.data.repository.ExchangeRateRepository.persistAndFlush(ExchangeRateRepository.kt:8)
2022-09-16T12:46:44.288006234Z  at com.payxpert.exchangerate.data.repository.ExchangeRateRepository.persistAndFlush(ExchangeRateRepository.kt:8)
2022-09-16T12:46:44.288009583Z  at com.payxpert.exchangerate.data.repository.ExchangeRateRepository_ClientProxy.persistAndFlush(Unknown Source)
2022-09-16T12:46:44.288012970Z  at com.payxpert.exchangerate.service.ExchangeRateService.getExchangeRate$suspendImpl(ExchangeRateService.kt:32)
2022-09-16T12:46:44.288016345Z  at com.payxpert.exchangerate.service.ExchangeRateService.getExchangeRate(ExchangeRateService.kt)
2022-09-16T12:46:44.288019769Z  at com.payxpert.exchangerate.service.ExchangeRateService_ClientProxy.getExchangeRate(Unknown Source)
2022-09-16T12:46:44.288023053Z  at com.payxpert.exchangerate.controller.ExchangeRateController.getExchangeRate$suspendImpl(ExchangeRateController.kt:25)
2022-09-16T12:46:44.288026472Z  at com.payxpert.exchangerate.controller.ExchangeRateController.getExchangeRate(ExchangeRateController.kt)
2022-09-16T12:46:44.288029972Z  at com.payxpert.exchangerate.controller.ExchangeRateController$quarkuscoroutineinvoker$getExchangeRate_66c797082ca56a703eb08f34be10b1d88f61d5f8.invokeCoroutine(Unknown Source)
2022-09-16T12:46:44.288033458Z  at org.jboss.resteasy.reactive.server.runtime.kotlin.CoroutineInvocationHandler$handle$1.invokeSuspend(CoroutineInvocationHandler.kt:40)
2022-09-16T12:46:44.288038057Z  at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
2022-09-16T12:46:44.288041480Z  at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
2022-09-16T12:46:44.288059843Z  at org.jboss.resteasy.reactive.server.runtime.kotlin.VertxDispatcher.dispatch$lambda-0(ApplicationCoroutineScope.kt:39)
2022-09-16T12:46:44.288073680Z  at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:264)
2022-09-16T12:46:44.288077043Z  at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:246)
2022-09-16T12:46:44.288080285Z  at io.vertx.core.impl.EventLoopContext.lambda$runOnContext$0(EventLoopContext.java:43)
2022-09-16T12:46:44.288083420Z  at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
2022-09-16T12:46:44.288086529Z  at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
2022-09-16T12:46:44.288089694Z  at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
2022-09-16T12:46:44.288092851Z  at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503)
2022-09-16T12:46:44.288095983Z  at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
2022-09-16T12:46:44.288099147Z  at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
2022-09-16T12:46:44.288102260Z  at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
2022-09-16T12:46:44.288105519Z  at java.base/java.lang.Thread.run(Thread.java:829)

切换为hibernate-reactive-panache后,所有功能均正常运行。


原因分析与结论

hibernate-orm-panache-kotlin本身不支持反应式数据源,具体原因如下:

  • hibernate-orm-panache(含Kotlin版本)基于传统JPA/Hibernate ORM构建,依赖阻塞式JDBC数据源,而非反应式数据源;
  • 反应式数据源是为hibernate-reactive及其Panache封装hibernate-reactive-panache设计的,两者底层运行模型完全不同:前者是阻塞式同步模型,后者是基于Vert.x的非阻塞反应式模型;
  • 异常中提到的default-reactive是反应式数据源的标识,但hibernate-orm-panache无法识别和使用这类数据源,它需要的是标准JDBC数据源配置。

解决方案

  • 若要使用反应式数据源,必须搭配hibernate-reactive-panache-kotlin(即你切换后正常工作的方案);
  • 若坚持使用hibernate-orm-panache-kotlin,需改为配置阻塞式JDBC数据源,而非反应式数据源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:31:23