zoukankan      html  css  js  c++  java
  • 关于tomcat WEB-INF/lib下类加载顺序

    关于tomcat WEB-INF/lib下类加载顺序问题

    1. 问题描述

      smc应用最近碰到一个线上问题,预发机器规则测试接口没问题,但是线上机器就是调用有问题,表面上看,maven模块引用的是自己想要的jar,但是debug的时候发现接口走的不是我引入的jar包类,然后全局搜索项目发现引用了不同的jar包里有相同的类,编译的时候没有问题

      羊驼内部修改过的jar:

      <dependency>
       <groupId>com.yangt.util</groupId>
       <artifactId>yangt-express</artifactId>
       <version>1.0.2</version>
      </dependency>
      

      淘宝的jar:

      <dependency>
       <groupId>com.taobao.util</groupId>
       <artifactId>taobao-express</artifactId>
       <version>3.0.6</version>
       <exclusions>
       <exclusion>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
       </exclusion>
       </exclusions>
      </dependency>
      
    2. 问题搜索

      网上搜索看到tomcat5-7对于WEB-INF/lib下的jar的搜索会按字母排序,tomcat8以上不会排序,依赖文件系统随机返回文件列表,这样的话tomcat8在不同的机器上可能出现运行时加载类混乱的问题(存在不同jar有相同类),从而发生诡异的问题。现在我们预发和线上都是tomcat8.x.x版本,所以类加载存在不确定性。所以原来smc存在以上2个jar包,运行到我的接口的时候预发优先加载了正确的类没问题,但是到了线上优先加载了另外的类,从而导致返回了错误的结果。

    3. 解决方式

      手动解决到底使用哪个包下的类,理论上不应该存在不同类型jar下相同的类名(相同jar不同版本可以用maven依赖排除),smc使用了

      <dependency>
       <groupId>com.yangt.util</groupId>
       <artifactId>yangt-express</artifactId>
       <version>1.0.2</version>
      </dependency>
      
  • 相关阅读:
    HDU 1051
    HDU 1236
    递归求gcd(a,b)
    HDU 1372
    HDU 1312
    HDU 1253
    HDU 1072
    ...别人的推荐、
    搜索总结、
    TortoiseHg简单的入门使用说明
  • 原文地址:https://www.cnblogs.com/yaojf/p/9852802.html
Copyright © 2011-2022 走看看