Tomcat 7 lib目录中的jar文件

3
我想请教以下问题:我有一个专门为单个Web应用程序提供服务的Tomcat 7。在$TOMCAT_HOME/lib目录中放置任何jar文件是否有意义?在文档中,它说:

因此,从Web应用程序的角度来看,类或资源加载按以下顺序查找存储库:

  • JVM的引导类
  • 系统类装入器类(如上所述)
  • /WEB-INF/classes您的Web应用程序
  • /WEB-INF/lib/*.jar您的Web应用程序
  • 公共类装入器类(如上所述)

因此,如果我理解正确,那么我没有理由将avtivemq或commons-dbcp放在$TOMCAT_HOME/lib目录中。相反,我可以将它们放在我的Web应用程序lib文件夹中,并确信它们将首先被选中。如果是这样,是否还有其他情况需要我使用$TOMCAT_HOME/lib目录?如果没有,您能否解释一下上面的错误之处?

谢谢,

G.

2个回答

3

如果您的web应用程序(或其中大部分)必须共享相同版本的相同库(即数据库驱动程序或SPI ObjectFactories),则应将它们共享在$TOMCAT_HOME/lib中。如果没有充分的理由共享库,则将它们保留在其Web应用程序的类加载器中。


1

是的。如果您重新启动Web应用程序(例如通过实时上传新版本或按下Tomcat管理器控制台上的“重启”按钮),则Web应用程序文件夹中的任何jar文件都将被清除并重新加载,但共享库文件夹中的jar文件不会重新加载。这意味着存储在jar文件中类中的静态值不会重置,并且初始化时jar启动的任何线程都不会重新启动。我不知道问题中的jar文件,但对于其他jar文件来说,这可能很重要(特别是那些假定它们能够启动守护进程线程而不终止它--如果您将它们留在Web应用程序文件夹中,这将导致上下文泄漏,如果频繁重新加载,这可能会导致显着的额外内存使用)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接