3

我想知道以下几点:我有一个专用于单个 web 应用程序的 Tomcat 7。将任何 jar 放在 $TOMCAT_HOME/lib 目录中是否有意义?在文档中它说:

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

  • JVM 的引导类
  • 系统类加载器类(如上所述)
  • /WEB-INF/Web 应用程序的类
  • /WEB-INF/lib/*.jar 您的 Web 应用程序
  • 通用类加载器类(如上所述)

所以,如果我没看错的话,我没有理由放 avtivemq 或 commons-dbcp。我可以将它们放在我的 webapps lib 文件夹中,并绝对确定它们会首先被拾取。如果是这样,是否有任何其他情况对我使用 $TOMCAT_HOME/lib 目录有意义?如果不是,您能否解释一下上述缺陷在哪里?

谢谢,

G。

4

2 回答 2

2

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

于 2013-05-14T09:02:33.343 回答
1

是的。如果您重新启动您的网络应用程序(例如,通过实时上传新版本或按下 tomcat 管理器控制台上的“重新启动”按钮),您的 webapp 文件夹中的任何 jar 文件都将被刷新并重新加载,但共享 lib 文件夹中的那些文件不会重新加载。这意味着存储在 jar 中的类中的任何静态值都不会重置,并且 jar 在初始化时启动的任何线程都不会重新启动。我不知道问题中的 jar 文件,但这对于其他 jar 文件可能很重要(特别是那些假设他们能够启动守护线程而不终止它的文件——如果你离开,这将导致上下文泄漏它们在您的 Web 应用程序文件夹中,如果频繁重新加载,随着时间的推移,这可能会导致大量额外的内存使用)。

于 2017-08-17T19:11:51.487 回答