PropertyPlaceHolder在春天

时间:2011-11-21 16:15:19

标签: spring properties

我们在Spring中访问一个java属性:

<property name="fileSizeLimit" value="${someProperty}" />

bean声明

int fileSizeLimit = 9999;

如果属性文件中缺少“someProperty”,如何设置默认值?

ATM,我们得到NumberFormatException,因为spring使用属性“someProperty”的名称调用int-setter。设置属性后,一切正常。

http://static.springsource.org/spring/docs/1.1.5/api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html说:

  

可以通过“属性”定义默认属性值,以生成重写定义   在属性文件中可选。配置程序还将检查系统属性   (例如“user.dir”)如果它无法解析任何指定的占位符   属性。这可以通过“systemPropertiesMode”自定义。

这是否设置了查找属性的顺序?我在哪里配置它?

TIA,Bastl。

4 个答案:

答案 0 :(得分:13)

对于第一个问题,您可以使用以下语法为占位符设置默认值,其中9999是默认值。

<property name="fileSizeLimit" value="${someProperty:9999}" />

对于第二个问题,属性systemPropertiesModeName确定属性的解析顺序,属性文件与系统属性。例如,

<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>

告诉PropertyPlaceholderConfigurer在属性文件之前查看系统属性。

systemPropertiesModeName的值为:

SYSTEM_PROPERTIES_MODE_FALLBACK (default)
      Check system properties if not resolvable in the specified properties.
SYSTEM_PROPERTIES_MODE_NEVER 
      Never check system properties.
SYSTEM_PROPERTIES_MODE_OVERRIDE 
      Check system properties first, before trying the specified properties.

我通常在占位符中使用SYSTEM_PROPERTIES_MODE_OVERRIDE和默认值,因此顺序为

  1. 系统属性
  2. 属性文件
  3. 占位符默认

答案 1 :(得分:2)

在Spring 3中,你可以${someProperty:defaultValue}。我真的希望你不要使用1.1.5。

答案 2 :(得分:2)

您可以在xml文件中的bean定义中为PropertyPlaceHolder定义默认值。

<bean 
   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
   id="corePlaceHolder">
            <property name="ignoreUnresolvablePlaceholders" value="true"/>
            <property name="systemPropertiesModeName" 
                         value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
            <property name="searchSystemEnvironment" value="true"/>
            <property name="locations">
            <list>
                <value>classpath*:config/*/......./*.properties</value>
            </list>
            </property>
            <property name="properties">  
              <props>  
               <prop key="fileSizeLimit">123</prop>  
              </props>  
            </property>  
</bean> 

有关详细信息,请参阅http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

答案 3 :(得分:1)

根据its Javadoc使用PropertyPlaceholderConfigurer时,“占位符属性文件应包含每个已定义占位符的条目”。

但是,您可以为PropertyPlaceholderConfigurer提供多个位置(属性文件),并将其中一个用作默认值。这样,您可以确保始终拥有所需的默认值。

如果您希望应用程序在使用未定义属性时抛出异常,请确保PropertyPlaceholderConfigurer中的“ignoreUnresolvablePlaceholders”设置为false。