一次升级hibernate版本到5.4.21后仅单个机器出现的NoSuchMethodError问题

背景:

   项目一个版本已迭代测试一段时间,负责登录的组件,在某台真机上出现如下报错:期间其他测试人员的环境正常

奇怪的线索:

  a. 相同 jdk环境1.8.0_131下仅在某个机器上出现问题(该机器必现)  其他机器正常

  b. 报错位置里  红色框两个类属于同一个jar包  

怎么同一个jar里还出现解析不到?而且仅在一台服务上这样。当前这个jar包也没有多个出现但是版本不同的情况呀。

后来请教老大,说这种在一台机器上出现,基本上就是jar包冲突问题了,为什么其他环境没出现,基本是看运气,和类与jar的加载顺序有关,主要操作系统的文件系统类型决定。如果不是同一个jar的版本冲突,可能还是相关jar包的版本冲突。

解决办法:保证hibernate相关版本一致后,问题得到解决。

如图:

只是升级了这个一个jar包版本到5.4.21后,程序在发现的环境上部署后确认已修复。

结论: 不要觉得只在一台机器上出现就怀疑环境的问题,仍然最开始怀疑的就是jar冲突问题。尤其是本包内的调用NoSuchMethodError问题。

后续分析:

导致jar包加载顺序问题原因,可能是不同机器文件系统类型不一致,后续确认,我的机器的文件系统类型一致(df -T),都是ext4。但我的操作系统内核centos版本有差异(cat /etc/redhat-release),有问题的是centos6.5,其他是6.10或者6.8。

关于jar包加载顺序问题,很好的一个文章 https://www.jianshu.com/p/dcad5330b06f  可以阅读。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值