weblogic类加载思考

本文讲述了在Spring Boot项目上线后遇到的NoClassDefFoundError问题,由于WebLogic服务器自带的低版本Jackson库与工程中的高版本冲突导致。通过分析类加载顺序,发现WebLogic的ClassLoader层次,并尝试修改`weblogic.xml`配置来优先加载应用中的类,但因已有 `<prefer-application-packages>` 标签导致冲突。最终解决方案是移除冲突标签,成功启动工程。
摘要由CSDN通过智能技术生成

  前几天有个关联系统新项目上线,是一个用spring boot 1做的项目,在测试环境测试的非常正常,到了生产发布后,页面调用直接报NoClassDefFoundError,看了下堆栈信息,是没有找到一个关联的Jackson类,查看lib目录是用这个Jackson的jar包且也存在那个类,初步估计是jar包冲突了。好吧,写一个jsp页面通过类加载器来打印出用的是哪个jackson的jar包吧。

  打印出来的结果是在weblogic的安装目录下有默认的jackson包,而且版本比工程需要的版本要低,因此调用的时候直接报错了。

  虽然问题的原因找到了,但是还是感觉奇怪为啥测试环境没这个情况呢,环境应该一样的呀。再仔细查找发现环境还是有差异的,生产安装的版本是12.2.1.2,测试环境安装的版本是12.2.1.3,还是有一个小版本的差异的。下载了一个12.2.1.2到测试环境上进行验证,果然重现了这个问题。最后把生产的weblogic版本重新安装然后成功上线。

  虽然问题已经解决了,但是这种工程里的jar包与web容器的包冲突冲突应该可以通过类加载顺序解决,于是查找了一下weblogic类加载的资料,进行了相关资料查阅后了解到了:

Weblogic的ClassLoader有如下几个层次,按照从高到低顺序排列: 
 1. JDK Classloader 
 2. JDK ext Class Loader 
 3. Weblogic System Class Loader 
 4. Domain Class Loader(Child of System Class Loader) 
 5. App Class Loader  (负责装载应用中的所有的EJB JAR文件)
 6. Web Class Loader 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值