打破双亲加载tomcat
时间: 2023-09-07 08:03:05 浏览: 84
在传统的Tomcat部署方式中,默认会由双亲类加载器加载Tomcat的核心类。双亲类加载器是Java虚拟机中的一个重要概念,它采用了双亲委派模型,通过一层一层向上委托的方式来加载类。在这种模型中,首先会尝试由Bootstrap类加载器加载类,如果找不到,再由ExtClassLoader(扩展类加载器)加载,如果还找不到,最后由AppClassLoader(应用类加载器)加载。这样的设计可以保证类的加载是有序的,缓解了不同类之间的命名冲突问题。
然而,在某些特殊的情况下,我们可能需要打破双亲委派模型,自定义加载一些特殊的类。其中一种常见的场景是在应用中使用了一些第三方库,而这些库的版本与Tomcat的核心类库存在冲突,可能需要直接加载特定版本的类。
打破双亲类加载器加载Tomcat的核心类可以通过在启动Tomcat时指定自定义的类加载器来实现。具体操作是,在启动脚本或配置文件中增加如下的参数:
-Dcatalina.loader=org.apache.catalina.loader.ParallelWebappClassLoader
这样,Tomcat启动时将使用ParallelWebappClassLoader作为类加载器,它可以直接加载WEB-INF/lib目录下的JAR包中的类,而不经过双亲类加载器的委派。
需要注意的是,打破双亲类加载器加载Tomcat的核心类是一种高级配置,需要谨慎使用。对于大多数场景,我们应该依赖Tomcat默认的类加载机制,而避免直接修改Tomcat的类加载器配置。只有在特殊情况下才需要考虑自定义加载器。正确的使用类加载机制有助于保证应用的稳定性和兼容性。
阅读全文