多个WAR文件的相同tomcat单例

时间:2016-08-11 23:42:53

标签: java tomcat singleton

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

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

1 个答案:

答案 0 :(得分:3)

Tomcat中的每个webapp实例都独立于其他实例,因此如果您部署了多个Web应用程序,则具有单个类的不同实例。当然,如果你不另外告诉他们,他们都将被配置相同。

如果要在单个Tomcat实例中运行相同 webapp的多个实例,只需创建多个上下文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。