前言

今天帮鹊楠远程看了一个Bug,解决过程曲折离奇,误打误撞才搞定,但是这Bug异常离谱(可能是我水平不够),故此记录一下

异常

报了一个NestedServletException,提示NoSuchMethodError,然后说是因为org.springframework.beans.factory.ListableBeanFactory.getBeanProvider

解决过程

1. 一步步排查

我首先是去找org.springframework.beans.factory.ListableBeanFactory.getBeanProvider中的getBeanProvider,看有没有导了这个包或者调用了该方法的,结果全局都没有

然后点进显示为蓝色的类,看看有没有啥问题(这里主要是凭感觉),结果也是一无所获

没办法,只能求助于伟大的互联网(bushi

问了Chat、找了CSDN,都提到了可能是依赖冲突的问题,所以就去查pom.xml,不过这项目的依赖貌似有蛮多重复的(重复引入相同的依赖,没有标注版本号,我觉得应该是没问题的),但怕是玄学的问题,所以还是一一把重复的注释调了,不出所料,还是会报错。

黔驴技穷力,但是鹊楠是搞前端的,后端一窍不通,所以还是硬着头皮去找Bug。

这下只能从报错本身去排查了,头要秃了

2. 初现端倪

因为是依赖冲突的问题(可能),所以重点去排查jar包的问题,一顿艰辛的排查,发现下图中的jar包,感觉没见过的样子,所以就去maven依赖库里面找,没想到还真有这个jar包。

想着来都来了,干脆去把这个依赖换个新的试试看,于是就去官网Maven Repository找依赖

把原先的5.3.21的换成最新的6.1.5后,结果报错了

于是就找了5.2.x的最新版5.2.25.RELEASE换上去

换上去后,再次尝试,发现报错信息变了,太不容易了😭😭😭,终于有变化了

3. 找到问题

发现是数据库相关的错误,而且是插入异常,就从异常接口一一去Debug排查

结果找到问题,发现是这两个字段数据太长了,插不进去(数据库写的是varchar

于是将字段类型改为longtext,再重新尝试后,问题终于解决,太难力

玄学的问题

解决问题后,想着看看到底是什么原因导致的(感觉不像是更换依赖版本的原因,因为两个的报错信息完全不同)

果不其然,在我换回先前的maven版本后,并没有报错,

但是但是,在我直接改数据库字段类型为varchat(之前数据太长还改不了,我先把数据清空了再改的),再次尝试后(没有中断程序),又报错了,报错信息和数据库没关系,而是最前面的那个错误,离大谱

觉得太奇怪了,于是我又更改版本为5.2.25.RELEASE,报错信息变为和数据库相关的那个错误了

我不理解,大受震撼,问了Chat,得到了牛头不对马嘴的回复。

不明白什么原因,所以在此记录一下,万一以后解决了呢😊