我想爲多個不同的客戶部署相同的Web應用程序。每個部署在web.xml配置文件的其中一個元素中需要不同的值。如何自定義我的web.xml配置
沒有爲每個客戶建立不同的.war文件(在每個.war的web.xml中設置不同的值),是否可以爲不同的客戶配置值?例如,web.xml文件可以從每個部署屬性文件中獲取值嗎?
我們使用Tomcat作爲servlet容器。
我想爲多個不同的客戶部署相同的Web應用程序。每個部署在web.xml配置文件的其中一個元素中需要不同的值。如何自定義我的web.xml配置
沒有爲每個客戶建立不同的.war文件(在每個.war的web.xml中設置不同的值),是否可以爲不同的客戶配置值?例如,web.xml文件可以從每個部署屬性文件中獲取值嗎?
我們使用Tomcat作爲servlet容器。
您可以使用Tomcat的JNDI support在web.xml外指定更改屬性。
例如,指定Context元素中的環境條目:
<Context ...>
...
<Environment name="maxExemptions" value="10"
type="java.lang.Integer" override="false"/>
...
</Context>
然後在web.xml中指定的鏈接,這個環境變量:
<env-entry>
<env-entry-name>maxExemptions</param-name>
<env-entry-type>java.lang.Integer</env-entry-type>
</env-entry>
,然後從代碼中調用使用(從Professional Apache Tomcat 6):
private final Object lock = new Object();
...
synchronized (lock) {
Context initCtx = new InitialContext();
Context envCtx = initCtx.lookup("java:comp/env");
Integer maxExemptions = (Integer) envCtx.lookup("maxExemptions");
}
O您可以使用彈簧將您的價值注入到您的應用程序中<jndi-lookup />
<bean id="someBean">
<property name="maxExemptions">
<jndi-lookup jndi-name="xxx" />
</property>
</bean>
簡短的回答:不改變戰爭是不可能的。
一個更詳細的版本:戰爭可以包含一些參數和默認值,您可以經常使用應用程序服務器或Web服務器的控制檯更改這些參數和默認值。這取決於你想要配置什麼,這些標準的上下文/ servlet/...參數?
你可以將這個元素移到web.xml之外嗎?如果您可以從屬性文件中讀取它,那麼您可以爲每個客戶創建一個不同的屬性文件,併爲每個客戶打包屬性文件的戰爭。然後在運行時,您可以根據環境變量讀取適當的屬性文件。