Spring属性文件设置默认值

时间:2011-06-16 16:08:53

标签: java spring configuration properties

我在war文件之外有一个属性文件,系统管理员使用该文件来关闭某些系统功能。它已经在我的本地机器上工作得很好但是当我们部署到开发环境时,属性文件没有上传,应用程序无法启动。我想知道是否有办法在applicationContext中为通常来自属性文件的值声明默认值。

我目前要阅读属性文件:

<util:properties id="myProperties" location="file:${catalina.home}/webapps/myProperties.properties"/>

只要我们记得将属性文件放在正确的位置,这样就可以正常工作。有没有办法声明默认值,或者如果找不到这个文件,可能会从另一个文件读取?

由于

2 个答案:

答案 0 :(得分:11)

而不是<util:properties>使用PropertiesFactoryBeansetIgnoreResourceNotFound=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属性。