资讯前沿

让建站和SEO变得简单

让不懂建站的用户快速建站,让会建站的提高建站效率!

蓝因子 玩大发了,Tomcat 8.5 升级有坑……

最近某全系统作念了环境升级:

Tomcat 8.5.xJDK 1.8.x

有个系统升级后出现莫得这个要领非常:

threw exception; nested exception is java.lang.NoSuchMethodError:

上线后系统起不来,这下玩大了。。。

咋一看应该是 jar 包冲破了,流程排查,尽然是 jar 包冲破了,类旅途下存在了几个不同版块肖似的 jar 包,是由另外一个依赖引入进来的 compile 依赖,然后摒除冲破的依赖就惩办了。

那么问题来了,既然 jar 包冲破,疏通的环境,为什么在竖立环境、测试环境、预上线环境齐莫得出现问题?

流程查证,那是因为 Tomcat 8 之后的 jar 包加载样式变了,8 之前是按照字母规定加载的,而 8 之后就变了,Tomcat 使用的是 File.listFiles() 要领来获稳健今下的 jar 包,加载的规定就和文献系统复返的规定联系,就不一定是按字母排序了。

java.io.File#listFiles() 源码预防:

这个要领是获稳健今下的所有文献,它不可保证按指定的规定复返效用,绝顶是,不可保证按字母规定复返。为什么腹地环境不错,可能是刚好是按字母排序的了。

那么,这个问题的惩办看法不错是:

1)淌若是冲破问题,摒除冲破依赖惩办 jar 包冲破简略左迁到 tomcat 7 就行了,又简略是写个剧本查验一下包名是否有不异的包;咱们刚好是有两个 jar 包冲破了,惩办冲破就平常了;

2)淌若是业务问题,咱们齐知说念 JVM 双亲托付机制,并吞个类是不可不异加载的,淌若业务确乎需要加载多个版块的依赖,那就需要终了我方的自界说类加载器辨认去加载对应的 jar 包;



上一篇:客户条款 要好极少的超限超载检测设立 那就用广州聚杰    下一篇:我的积分若何今天一下子变为0了    

友情链接:

Powered by 资讯前沿 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群系统 © 2013-2024