gpt4 book ai didi

tomcat - 在 Tomcat 上将 servlet 部署为共享 jar 库时的路径问题

转载 作者:行者123 更新时间:2023-11-28 23:39:12 29 4
gpt4 key购买 nike

我开发并测试了一个作为 War 文件的应用程序,在游戏的后期,DevOps 公司规定我正在处理的应用程序将部署为一个共享的 Jar 文件。部署环境为Windows Server 2008R2上的Tomcat6。

Web 应用程序的多个(约 100 个)实例作为单独的 Tomcat 实例运行。我试图解决的问题是,一旦应用程序 jar 从实例库移动到 tomcat 库,应用程序就无法找到我的日志记录配置文件 logback.xml。它看起来有点像这样:

/root/tomcat6/
bin/
lib/
myapp.jar
conf/
...
myapp_inst1/
myapp.properties <-- yes, this is an odd place for props
bin/
installmyapp.bat <-- custom scripts to install and run as win service
startmyapp.bat and set catalina home and work
stopmyapp.bat
conf/
web.xml
server.xml <-- port, etc., changed for instance
webapp/
ROOT/
WEB-INF/
lib/ <-- empty!
classes/
logback.xml
web.xml <-- refers to servlet class in myapp.jar
myapp_inst2/
...
myapp_inst3/
...

我的理解是,我正在使用的记录器,Slf4j 下的 Logback,只是使用类路径来定位 logback.xml 配置文件(来自 http://logback.qos.ch/manual/configuration.html)。

我的理解也是,Tomcat 构建了自己的类路径,这些应该包括应用程序 lib/、应用程序 classes/tomcat/lib/ 目录 ( http://www.mulesoft.com/tcat/tomcat-classpath )。但是,当我将我的应用程序 jar 文件移动到应用程序 lib/ 目录之外时,我在 logback.xml 中设置的 logback 设置不再生效。

有谁知道为什么应用程序不再找到配置文件,更重要的是,如何解决这个问题?我唯一能想到的是 Tomcat 应用程序上下文类加载器可以使用 Tomcat 公共(public)类加载器,但反之则不行(但是你如何解决这个问题?)

对我来说一个很大的要求是应用程序日志文件必须是独立的并且允许在每个实例的基础上进行定制,所以我不认为将它复制到 tomcat/lib 会得到我在那里。有什么想法吗?

  • 编辑 -

我的问题的根源似乎是 tomcat 类路径。由于 web 应用程序入口点是 tomcat 的公共(public)类加载器中的 servlet,因此它在应用程序上下文类加载器中找到的任何内容都对应用程序不可用。真可惜。

我正在想办法解决这个问题。你怎么看?

1) 将 servlet 实例重构为非常非常通用的东西,以便在产品的生命周期内永远不需要更改它。我说的是一个 servlet 的裸壳。然后,该类将由应用程序上下文加载器加载,并可以在共享位置的 jar 中“找到”可以维护的应用程序的其余部分。

2) 创建一个 servlet 生命周期对象的实例,而不是 servlet,例如 ServletContextListener,例如,它会获取一个 logger 对象。同样,这将被编码为最低限度,目的是它永远不会改变。使用上下文监听器而不是 servlet 本身可能会更容易。原则上这会强制应用程序上下文进入范围吗?

最佳答案

将您的 webapp 部署为共享 jar 听起来不是个好主意。其背后的原理是什么?

您可以做的是将它分成两个 jar 。一个 jar 用于放置在 tomcat/lib 下的通用库内容,另一个 jar 用于放置在下的特定于应用程序的内容(如 logback.xml 文件) Web 应用程序的 WEB-INF/lib

另见 this question (哦,我刚注意到它也是你写的:)。

关于tomcat - 在 Tomcat 上将 servlet 部署为共享 jar 库时的路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21633713/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com