如果您使用的是Spring 3,则可以利用Spring表达式语言。假设您有两个应用程序 app1.war 和 app2.war,它们需要一个名为 config.properties 的属性文件。应用程序将使用上下文路径 /app1 和 /app2 进行部署。
在公共目录中创建两个目录app1和app2,例如。C:\myConfig\app1 和 C:\myConfig\app2。
将 config.properties 放在 app1 中,将另一个 config.properties 放在 app2 中。
然后创建一个文件 ${CATALINA_HOME}/conf/[enginename]/[hostname]/context.xml.default,内容如下:
上下文.xml.default:
<Context>
<Parameter name="myConfigDirectory" value="C:/myConfig" override="false"/>
</Context>
参数 myConfigDirectory 将可用于主机上的所有应用程序。最好在上下文.xml.default 中创建此参数,而不是在服务器.xml中创建此参数,因为以后无需重新启动 tomcat 即可更改该文件。
在应用程序中Context.xml war中,您可以使用SpEL表达式访问config.properties:“#{contextParameters.myConfigDirectory + servletContext.contextPath}/config.properties”,因此例如,您可以编写:
应用上下文.xml:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="file:#{contextParameters.myConfigDirectory + servletContext.contextPath}/config.properties" />
</bean>
对于具有 contextPath /app1 的应用程序,表达式将扩展为 C:/myConfig/app1,对于具有 contextPath /app2 的应用程序,表达式将扩展为 C:/myConfig/app2。这将使应用程序根据其上下文路径访问 config.properties 文件。