这可能是一个非常基本的问题,但如果这是众所周知的并且已在其他地方解决,请帮助我。
我有一个多战争设置(所有 maven 模块),我需要在 Tomcat 实例上部署两个 WAR kilo-webapp1。kilo-webapp2这两个 webapp 都使用来自一个公共服务 jar 的服务,比如kilo-common-services.jar. 它kilo-common-services.jar有自己的 spring 上下文,由 jar 即用户加载。在这种情况下kilo-webapp1。kilo-webapp2碰巧kilo-common-services中的服务初始化需要很长时间,因此我希望它只发生一次(以确保启动实例所需的时间不是很高),这也对我有帮助将其用作在 JVM 实例中保持最新的二级缓存。为此,我们采取了以下步骤:
- 修改tomcat中CATALINA_BASE的catalina.properties
shared.loader为${catalina.base}/shared/lib kilo-common-services.jar将及其所有依赖的 jar复制到CATALINA_BASE/shared/lib. [手动步骤]- 将 spring 相关的 jar 复制到该
CATALINA_BASE/shared/lib位置 [手动步骤] - 中创建了一个
beanRefContext.xml文件kilo-common-services.jar。在此处定义一个新ClassPathXmlApplicationContext的,其中为构造函数提供了公共服务的 spring 上下文文件的位置。 - 注意到和pom 文件中的
kilo-common-services.jar所有其他依赖项(如 Spring 相关 jars)的依赖项范围。对于 Spring,这需要确保不会触发两次类路径扫描操作。如果没有通过范围排除,这也会导致不同的 s (比如说 log4j) 。providedkilo-webapp1kilo-webapp2ClassCastExceptionprovided - web.xml
kilo-webapp1并kilo-webapp2表示它们的 parentContext 是servicesContext在kilo-common-services.jar.
我能够验证只有一个kilo-common-services 服务实例存在,但是您可能想象的设置很痛苦。如果有人在 Eclipse 之类的 IDE 中进行此类设置的最佳实践,将不胜感激。我的问题如下:
- #2 正在成为一个挑战。我目前正在运行将
mvn dependency:copy-dependencies依赖 的kilo-common-servicesjar 从复制target/dependency到shared/lib其中,这是一个非常糟糕的手动步骤。一次又一次,我忘记重新生成依赖项,不得不再次进行重新部署。 - #3 也不是直截了当的,因为一次又一次有更新的常见依赖项,我们总是必须记住将其复制到共享库以避免 ClassCastExceptions
- #5 再次成为维护的噩梦。
同样随着时间的推移,将有更多这样不同的普通罐子需要共享,并且每个罐子都会带来痛苦。随意批评设置并提出一个更好的设置,它可能易于使用(也来自 IDE)。很乐意提供任何其他细节。
提前致谢!