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

commons-dbcp2调用rollback触发StackOverFlowError循环调用问题求助

问题根因说明

这是commons-dbcp2 2.6.0版本的已知内部bug,由toString方法循环调用直接导致。

触发逻辑

你提交的错误栈完全匹配该问题的典型特征:

  • org.apache.commons.pool2.impl.GenericKeyedObjectPool的toStringAppendFields方法执行时,会输出持有的连接对象详情,触发PoolingConnection的toString方法
  • org.apache.commons.dbcp2.PoolingConnection的toString方法执行时,又会反向输出关联的连接池对象详情,再次触发GenericKeyedObjectPool的toString逻辑

二者形成无限循环调用,栈深度超过JVM限制后就会抛出StackOverflowError。通常该问题会在事务回滚、连接状态异常时触发,此时dbcp2内部会打印包含连接/连接池信息的日志,进而触发两个类的toString互相调用。

解决方案

  • 根因修复方案:直接将commons-dbcp2升级到2.7.0及以上版本即可,官方已在该版本修复了toString循环调用的问题,无需修改现有业务代码,也不需要连带升级Hibernate、commons-io等无关依赖。
  • 临时规避方案:如果暂时无法完成依赖升级,可以调整日志配置,将org.apache.commons.dbcp2、org.apache.commons.pool2包的日志级别调整为WARN及以上,避免触发包含对象详情的低级别日志打印,可临时避免问题触发,但无法从根本上解决问题,建议尽快完成依赖升级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 04:06:03