使用tomcat设定shared lib共享同样的jar
在项目越来越多的时候,部署在tomcat的发布包也会越来越多,这样难免有很多相同的jar会被加载,占用大量的永久存续区内存,通过设定shared lib来控制相同的jar只加载一个,
这样有以下好处:
1、避免不同项目加载相同的jar,减少对永久存续区的内存占用
2、提高tomcat的启动速度,因为少加载了许多重复的jar
一、如何设定shared lib
方式一:
修改conf文件下的catalina.properties文件,配置shared.loader的路径:
配置绝对路径:
shared.loader="d:hs/develop/shared/lib","d:/hs/develop/shared/lib/*.jar"
之后将相同的jar放在指定的文件夹下。
或配置相对路径:
shared.loader="${catalina.base}/shared/lib","${catalina.base}/shared/lib/*.jar"
之后在和conf同目录下新建shared目录,将相同的jar放在lib里
方式二:
修改conf文件下的catalina.properties文件,配置common.loader的路径,追加shared lib的路径:
common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/lib/shared/*.jar"
之后在lib文件夹下新建一个shared目录,并将相同的jar放在shared目录下
二、catalina.home和catalina.base的区别
在一个tomcat下,catalina.home和catalina.base指向相同的位置,即bin等目录的父目录。
若是在安装多个tomcat实例又不想安装多个软件备份的时可以使用这两个属性,在tomcat目录下只有 bin 和 lib 目录被多个tomcat示例公用,其它目录conf、logs、temp、webapps和work 是每个tomcat实例自己独立的备份。
这时他们指向不同的位置:
catalina.home
(安装目录):指向公用信息的位置,就是bin和lib的父目录。
catalina.base
(工作目录):指向每个tomcat目录私有信息的位置,就是conf、logs、temp、webapps和work的父目录。
三、tomcat6类加载机制
commonclassloader
:
负责装载$catalina_home/common目录下的所有类和jar包,详细的配置可参考$catalina_home/conf/catalina.properties文件中的common.loader配置;该classloader装载的类对于server class loader和webapp class loader是可见的;commonclass loader在tomcat启动时创建,其parent classloader是system class loader;
server classloader
:
负责装载tomcat的核心类,位于$cataline_home/server目录下的所有类和jar,可由catalina.propreties中的server.loader配置指定;它在tomcat启动时被创建,其parent loader是commonclass loader;
sharedclass loader
:
负责装载webapp公用的类,可以用户通过catalina.properties文件中的shared.loader属性来指定;它在tomcat启动时被创建,其parentloader也是common class loader;
webappclassloader
:
它只负责加载各自app中web-inf/classes以及web-inf/lib下的类;其parentloader虽然是shared class loader,但其加载策略和默认的类加载机制不太一样;
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。