我想知道以下内容:我有一个专门用于单个webapp的Tomcat 7。将任何jar放在$ TOMCAT_HOME / lib目录中是否有意义?在documentation中它说:
因此,从Web应用程序的角度来看,类或资源加载按以下顺序查找以下存储库:
- JVM的Bootstrap类
- 系统类加载器类(如上所述)
- / WEB-INF /您的Web应用程序的类
您的Web应用程序的- / WEB-INF / lib / * .jar
- 常见的类加载器类(如上所述)
所以,如果我正确地读这个,我没有理由把avtivemq或commons-dbcp放进去。我可以将它们放在我的webapps lib文件夹中,并且绝对确定它们将首先被拾取。如果是这样,是否有任何其他方案对我来说使用$ TOMCAT_HOME / lib目录是有意义的?如果没有,你能否解释一下上述有缺陷的地方?
谢谢,
-G。
答案 0 :(得分:1)
如果您的webapps(或大多数)必须使用相同的版本(即数据库驱动程序或SPI ObjectFactories)共享相同的库,您应该在$ TOMCAT_HOME / lib中共享它们。如果共享库没有坚实的理由,请将它们保存在webapp的类加载器中。
答案 1 :(得分:0)
是。如果您重新启动Web应用程序(例如,通过实时上传新版本或按下tomcat管理器控制台上的" restart"按钮),您的webapp文件夹中的任何jar文件都将被刷新并重新加载,但是共享lib文件夹未重新加载。这意味着不会重置存储在jar中的类中的任何静态值,并且不会重新启动jar在初始化时启动的任何线程。我不知道问题中的jar文件,但这对其他jar文件很重要(特别是那些假设他们能够启动守护程序线程而不是终止它的文件 - 这会导致上下文泄漏,如果您将它们保留在您的Web应用程序文件夹中,如果频繁重新加载,这会导致大量额外的内存使用量。)