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

Quarkus应用MongoDB客户端找不到codec、启动告警及查询栈溢出如何解决?

故障根因

  • 依赖版本冲突:项目中引入的MongoDB Java驱动(bson模块)版本和Quarkus mongodb-panache依赖的适配版本不匹配,高版本bson包移除了org.bson.codecs.pojo.EnumPropertyCodecProvider的无参构造方法,Quarkus runtime反射加载该类失败,抛出启动告警。
  • Codec注册失败:启动阶段POJO属性编解码器加载失败后,实体类的序列化/反序列化无法匹配到对应Codec,执行数据库查询时 fallback 到通用BsonCodec,触发递归调用最终抛出StackOverflow异常。

解决方案

  1. 统一依赖版本
    优先使用Quarkus BOM管理所有Quarkus相关依赖版本,避免自行指定MongoDB驱动版本引发冲突。在pom.xml的dependencyManagement节点引入Quarkus BOM:
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-bom</artifactId>
      <version>你的Quarkus版本号</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

同时移除公共实体模块中单独配置的bson、mongodb-driver依赖的版本号,交由BOM统一管理。

  1. 配置实体类扫描
    在application.properties中配置Panache实体类扫描路径,确保独立模块中的实体类可以被正确识别并注册Codec:
quarkus.mongodb.panache.scan-packages=你的实体类所在的包名(多个包用逗号分隔)

如果实体类未添加@Entity或@BsonDiscriminator注解,补充对应注解提升扫描识别效率。

  1. 禁用不兼容Codec加载
    如果启动告警仍然存在,可在application.properties中手动指定可用的Codec Provider,跳过不存在的类加载:
quarkus.mongodb.property-codec-providers=org.bson.codecs.pojo.PojoPropertyCodecProvider

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:15:05