java - 管理部署在 Java J2EE Web 容器中的多个 Web 应用程序的策略

标签 java tomcat

我在 tomcat web 容器中部署了多个 war(5+),如下所示:

war1
 +-META-INF
 +-WEB-INF
       +-classes
         +-MyClass1.class
       +-libs
         +-log4j.jar
         +-spring.jar
war2
 +-META-INF
 +-WEB-INF
       +-classes
         +-MyClass2.class
       +-libs
         +-log4j.jar
         +-spring.jar

如您所见,Web 应用程序使用的库存在重叠。通过将我的各种应用程序组合成一个单体应用程序并按如下所示进行部署,我会有所收获吗?

war3
 +-META-INF
 +-WEB-INF
       +-classes
         +-MyClass1.class
         +-MyClass2.class
       +-libs
         +-log4j.jar
         +-spring.jar

我担心我的容器在第一个方案下的内存需求不是最优的,因为 log4j.jar 和 spring.jar 被加载了两次,即使它们是完全相同的版本。我真的不知道 web 容器是如何工作的——也许 web 容器 (Tomcat) 足够智能,不会加载库两次。

最佳答案

引用https://sec1.woopra.com/docs/class-loader-howto.html有关 tomcat 类加载器如何工作的链接。

在您当前的结构中,类将由每个 web 应用程序特定的单独类加载器加载,如果您担心这一点,可以修改您的布局以单独放置公共(public)类。但我担心的一件事是,这会限制您的个人应用程序的灵 active 。如果您想将一个应用程序从 Spring 2.5 升级到 3.0 而不是其他应用程序,如果共享 jars,则不能。

除非您确实看到多个应用程序因在每个应用程序中包含单独的 jar 而出现问题,否则我不会更改它。

关于java - 管理部署在 Java J2EE Web 容器中的多个 Web 应用程序的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6903386/

相关文章:

java - ibatis in/out参数问题

java - Unix 脚本在 Java Process Runtime.exec() 中不起作用

java - 已编译的 JSP Java (*__jsp.java) 文件在哪里?

tomcat - Redis/Jedis - Tomcat 挂起 - - 等待 <5c1a77ba>(一个 org.apache.commons.pool.impl.GenericObjectPool$Latch)

Tomcat 9 设置外部属性

java - 如何在Java类中实现封装?

java - java中的动态数组声明

java - 从按元素值排序的多个 vector 调用函数

java - 查找我的浮点值 ArrayList 的最小值

angularjs - java.io.IOException : Unable to unwrap data, 无效状态