我在war文件之外有一个属性文件,系统管理员使用该文件来关闭某些系统功能。它已经在我的本地机器上工作得很好但是当我们部署到开发环境时,属性文件没有上传,应用程序无法启动。我想知道是否有办法在applicationContext中为通常来自属性文件的值声明默认值。
我目前要阅读属性文件:
<util:properties id="myProperties" location="file:${catalina.home}/webapps/myProperties.properties"/>
只要我们记得将属性文件放在正确的位置,这样就可以正常工作。有没有办法声明默认值,或者如果找不到这个文件,可能会从另一个文件读取?
由于
答案 0 :(得分:11)
而不是<util:properties>
使用PropertiesFactoryBean和setIgnoreResourceNotFound=true
。
例如:
<bean id="myProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound"><value>true</value></property>
<property name="locations">
<list>
<value>classpath:default.properties</value>
<value>file:${catalina.home}/webapps/myProperties.properties</value>
</list>
</property>
</bean>
请注意列出的文件的顺序很重要。稍后文件中的属性将覆盖之前的文件。
答案 1 :(得分:3)
作为@ricricm答案的后续内容,如果您愿意,您也可以直接在上下文中配置默认值,而不是使用单独的default.properties文件:
<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"
p:location="file:${catalina.home}/webapps/myProperties.properties"
p:ignoreResourceNotFound="true">
<property name="properties">
<props>
<prop key="default1">value1</prop>
...
</props>
</property>
</bean>
注意:这使用p-namespace作为location和ignoreResourceNotFound属性。