线上一个java.lang.NoSuchMethodError问题的解决

问题描述 : 项目启动时出现如下图错误,一样的配置项目在其他服务器及本地跑没有问题 ,故排除代码问题。

 

线上一个java.lang.NoSuchMethodError问题的解决

 

问题分析:查看错误信息 ,全局搜索SpelParserConfiguration类时,发现  spring-expression 和activemq jar包都有这个类,故怀疑是jar包冲突问题,分析原因应该是:jar包的加载是随机的,导致有一台总是失败的。

 

问题解决:因为 spring-expression 和activemq jar包都是有用到的,不可能排除依赖。故把spring-expression .jar 移动到$java_home/lib/ext 让其优先加载,测试后成功了。

因为用的是tomcat启动相关应用,参考tomcat 加载顺序:

加载顺序:

1. $java_home/lib 目录下的java核心api 

2. $java_home/lib/ext 目录下的java扩展jar包

3. java -classpath/-Djava.class.path所指的目录下的类与jar包

4. $CATALINA_HOME/common目录下按照文件夹的顺序从上往下依次加载

5. $CATALINA_HOME/server目录下按照文件夹的顺序从上往下依次加载

6. $CATALINA_BASE/shared目录下按照文件夹的顺序从上往下依次加载

7. 我们的项目路径/WEB-INF/classes下的class文件

8. 我们的项目路径/WEB-INF/lib下的jar文件
--------------------- 
作者:budapest 
来源:**** 
原文:https://blog.****.net/budapest/article/details/80751807