我之前使用的是现已弃用的类,org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer用于从服务器的文件系统加载属性文件.我有以下bean定义:
<bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
<property name="locations" value="${config}"/>
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="searchContextAttributes" value="true"/>
<property name="contextOverride" value="false"/>
<property name="ignoreResourceNotFound" value="true"/>
<property name="searchSystemEnvironment" value="false"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
这config是一个在启动Tomcat时传递的参数,即
-Dconfig=/path/to/application.properties
Run Code Online (Sandbox Code Playgroud)
对于webapp我也有一个上下文文件:
<Context docBase="/path/to/application.war">
<Parameter name="host" value="localhost" override="false"/>
<Parameter name="port" value="8080" override="false"/>
</Context>
Run Code Online (Sandbox Code Playgroud)
如果参数.properties指定的文件-Dconfig包含某些其他bean引用的属性,.properties则使用该文件中的值,否则将使用上下文xml文件中的值.
这使我可以使用WAR部署一组默认属性,如果需要,我可以指定一个.properties文件来覆盖特定值.
现在,我正在更新以在Spring 3.1中使用新的属性抽象,但我似乎无法弄清楚它的等效方法是什么?
我以相同的方式部署了相同的上下文文件和war,现在我在应用程序中有以下内容:
<context:property-placeholder
location="${config}"
system-properties-mode="OVERRIDE"
ignore-resource-not-found="true"
ignore-unresolvable="true"/>
Run Code Online (Sandbox Code Playgroud)
这将查找并使用属性文件中的属性,但它不使用上下文XML文件中的值.
在使用这个新的属性占位符时,如何让我的应用程序使用上下文参数?
谢谢.
总结一下,问题在于,当使用 Spring 3.1 中引入的新 Property Placeholder 命名空间时,Servlet 上下文文件中的 Context 参数没有用于解析占位符。
我已经找到了一个解决方案,如下
<context:property-placeholder location="${config}" local-override="true" ignore-resource-not-found="true"/>
Run Code Online (Sandbox Code Playgroud)
我可以使用 JVM 参数在本地文件系统上指定一个或多个 *.properties 文件,例如:
-Dconfig=/path/app.properties
Run Code Online (Sandbox Code Playgroud)
如果在检查文件后无法解析占位符属性,app.properties则检查 Servlet 上下文参数。
这允许我使用 web.xml 中的上下文参数获得默认值,并且在需要时我可以通过使用configJVM 参数指定 *.properties 文件的位置来覆盖这些值。
让它以这种方式工作的关键是包含local-override="true",默认情况下这是 false 。我不完全确定它是否有意义,因为该属性的描述是:
指定本地属性是否覆盖文件属性。默认值为“false”:文件属性覆盖本地默认值。
如果 中存在相同的属性键,app.properties则使用web.xml中的值app.properties。
| 归档时间: |
|
| 查看次数: |
2935 次 |
| 最近记录: |