多个WAR文件使用同一个tomcat单例



我在tomcat中部署多个WAR文件,其中包含同一应用程序的不同实例。每个WAR文件都包含一个类作为一个单例,但这个单例是获得相同的值为每个WAR我正在部署…如果我需要每个不同的值(DB参数,端口等,…)我读到,由于单例依赖于包含在相同JVM中的相同ClassLoader,这种行为是正常的,但我需要为我正在部署的每个WAR文件获得独立的单例实例。

tomcat服务器是否有任何配置来确保每个WAR实例都有不同的Singleton实例?

Tomcat中的每个web应用实例都是独立的,所以如果你部署了多个web应用,它们有不同的单例类实例。当然,如果你不告诉他们,他们都将被配置为相同的。

如果您想在Tomcat的单个实例中运行相同的 web应用程序的多个实例,只需创建多个上下文XML文件即可。你甚至不需要复制war文件。

$TOMCAT_HOME$/conf/Catalina/localhost中,创建多个XML文件,例如

foo.xml

<Context docBase="C:/path/to/MyWepApp.war">
  <Parameter name="greeting" value="Hello from FOO"/>
</Context>

bar.xml

<Context docBase="C:/path/to/MyWepApp.war">
  <Parameter name="greeting" value="Hello from BAR"/>
</Context>

如果你的webapp代码调用ServletContext.getInitParameter("greeting")来获得配置值,它现在可以在每个部署的实例中显示不同的欢迎语。

您现在可以使用http://localhost:8080/foohttp://localhost:8080/bar访问它们。

当您更新war文件时,它们都将自动重新部署,而无需重新启动Tomcat。

最新更新