Quarkus应用MongoDB客户端找不到codec、启动告警及查询栈溢出如何解决?
故障根因
- 依赖版本冲突:项目中引入的MongoDB Java驱动(bson模块)版本和Quarkus mongodb-panache依赖的适配版本不匹配,高版本bson包移除了
org.bson.codecs.pojo.EnumPropertyCodecProvider的无参构造方法,Quarkus runtime反射加载该类失败,抛出启动告警。 - Codec注册失败:启动阶段POJO属性编解码器加载失败后,实体类的序列化/反序列化无法匹配到对应Codec,执行数据库查询时 fallback 到通用BsonCodec,触发递归调用最终抛出StackOverflow异常。
解决方案
- 统一依赖版本
优先使用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统一管理。
- 配置实体类扫描
在application.properties中配置Panache实体类扫描路径,确保独立模块中的实体类可以被正确识别并注册Codec:
quarkus.mongodb.panache.scan-packages=你的实体类所在的包名(多个包用逗号分隔)
如果实体类未添加@Entity或@BsonDiscriminator注解,补充对应注解提升扫描识别效率。
- 禁用不兼容Codec加载
如果启动告警仍然存在,可在application.properties中手动指定可用的Codec Provider,跳过不存在的类加载:
quarkus.mongodb.property-codec-providers=org.bson.codecs.pojo.PojoPropertyCodecProvider
内容的提问来源于stack exchange,提问作者David SK
相关产品推荐
相关产品推荐

