You need to enable JavaScript to run this app. Spring升级后报NoSuchMethodError: CollectionUtils.newLinkedHashMap缺失
优惠活动
大模型
产品
解决方案
定价
更多

Spring升级后报NoSuchMethodError: CollectionUtils.newLinkedHashMap缺失

问题根因

这个报错是版本升级后典型的Spring依赖版本错位问题,核心逻辑链路:

  • 报错中提到的org.springframework.util.CollectionUtils#newLinkedHashMap(int)静态方法,归属spring-core模块,是Spring Framework 5.3.0版本才新增的方法,5.2.x及更早版本的CollectionUtils类中完全不存在这个方法签名。
  • 你代码中调用的jdbcTemplate.call(...)属于spring-jdbc模块的实现逻辑,如果运行时加载的spring-jdbc版本在5.3.0及以上,其内部JdbcTemplate.call方法会主动调用上述newLinkedHashMap来初始化存储过程调用的参数元数据Map。
  • 当类路径下实际加载的spring-core版本低于5.3.0时,JVM在执行到上述调用逻辑时找不到目标方法,就会抛出NoSuchMethodError;由于异常是在你调用jdbcTemplate.call的栈帧中抛出的,报错堆栈会直接指向你写的业务代码行。你代码中传入的new ArrayList<>()和这个报错没有任何关联,不需要修改业务逻辑排查方向。
排查与解决方向
  • 第一步:确认运行时实际加载的类版本
    直接在应用启动逻辑中加一段临时打印代码,定位两个类的真实加载来源:
    System.out.println("CollectionUtils加载路径: " + CollectionUtils.class.getResource("/org/springframework/util/CollectionUtils.class"));
    System.out.println("JdbcTemplate加载路径: " + JdbcTemplate.class.getResource("/org/springframework/jdbc/core/JdbcTemplate.class"));
    
    对比输出路径对应的jar包版本,可直接验证是否存在错位:如果JdbcTemplate来自5.3.x的spring-jdbc包、CollectionUtils来自5.2.x及更早的spring-core包,即可100%确认是版本冲突。
  • 第二步:梳理依赖树定位版本偏移来源
    Maven项目执行mvn dependency:tree -Dincludes=org.springframework,Gradle项目执行gradle dependencies --configuration runtimeClasspath,重点排查两类问题:
    • 版本升级时只单独替换了spring-jdbc、spring-boot-starter-jdbc等个别模块,没有对齐spring-core、spring-context等其他Spring核心模块的版本
    • 存在老旧的第三方间接依赖,强制引入了低版本的spring-core,覆盖了你预期配置的高版本依赖
  • 第三步:按实际场景修复冲突
    • 优先通过Spring Boot官方BOM统一管理所有Spring相关组件的版本,避免零散配置单个模块版本导致的兼容性问题
    • 对强制引入低版本spring-core的间接依赖,通过依赖排除规则将低版本spring-core从传递依赖中剔除
    • 如果项目暂时无法将spring-core升级到5.3.0及以上版本,同步将spring-jdbc版本降级到和当前spring-core匹配的5.2.x及更低版本,消除版本错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 05:15:10