一尘不染

Web应用程序和依赖项jar移至Tomcat 6 lib目录,登录无法找到配置文件

tomcat

我在Tomcat 6上安装了Java 6应用程序。应用程序jar文件和依赖项jar文件位于我的webapps / myapp / WEB-INF /
lib目录中,而我的登录配置文件位于webapps / myapp / WEB-INF / classes中。

该应用程序是唯一在tomcat实例中运行的应用程序,我们一次运行约100个实例。服务器管理团队认为应用程序库和依赖库是多余的,并将它们移至tomcat /
lib。

首先,他们仅将myapp.jar移至tomcat / lib。这导致了一个例外:

java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)

这有点奇怪,因为如果有的话,我希望它无法尝试加载我的应用程序。相反,似乎从tomcat /
lib中的jar加载应用程序已更改了类加载器的路径。我认为Web应用程序目录,当然还有WEB-INF /
web.xml,将把类加载器“锚定”到应用程序目录中。似乎并非如此。

如果这不起作用,则管理团队将所有其他依赖库移至tomcat /
lib目录。现在,该应用程序已启动,找到了它的配置属性文件等,但没有找到logback.xml文件(在WEB-INF / classes /
logback.xml中)。同样,这表明在类加载器环境中发生了一些重大变化。

最重要的结果是,如果我在WEB-INF /
lib目录中放置了新的依赖项,则应用程序将不再看到它。当然,再次查看我的日志记录配置文件而不必将其也移动到tomcat / lib会很好。

关于我的配置发生了什么的任何想法?


阅读 175

收藏
2020-06-16

共1个答案

一尘不染

如果您的服务器在Linux上运行,则存在另一种设置,可以防止这些类加载器问题,并且(也许)使您的服务器管理员满意。您可以将常见的jar放在某个目录中(
在下tomcat/lib),然后在每个web应用程序的WEB-INF/lib目录下创建指向这些jar的符号链接。

我已经使用此设置多年,对我来说效果很好。您可以创建一个扫描通用jars目录的shell脚本并为每个Web应用程序创建符号链接,并且可以将该脚本设置为在Tomcat启动时自动运行(例如,通过Tomcat的启动脚本调用它)。

2020-06-16