2011-11-21 204 views
1

我們訪問Java屬性在春天這樣的:PropertyPlaceHolder春季

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

bean的聲明

int fileSizeLimit = 9999; 

如何設置一個默認的,如果「someProperty」的性質 - 缺失文件?

ATM,我們得到NumberFormatException,因爲spring會調用帶有屬性「someProperty」名稱的int設置器。財產設置後,一切正常。

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

默認屬性值可以通過「屬性」來定義,要壓倒一切的定義 屬性文件可選。如果配置程序無法解析具有任何指定的 屬性的佔位符,它還將檢查系統屬性 (例如「user.dir」)。這可以通過「systemPropertiesMode」進行定製。

這是否設置查找屬性的順序?我在哪裏配置?

TIA,Bastl。

回答

11

對於第一個問題,可以使用以下語法爲佔位符設置默認值,其中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. 佔位符默認
2

在春季3,你可以做${someProperty:defaultValue}。我真的希望你沒有使用1.1.5。

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> 

進一步的細節

1

當使用PropertyPlaceholderConfigurer,根據its Javadoc「的佔位符屬性文件應該包含爲每個定義的佔位符的條目」見http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

但是,您可以爲您的PropertyPlaceholderConfigurer提供多個位置(屬性文件),並將其中一個用作默認值。這樣你可以確保你總是有你需要的默認值。

如果您希望應用程序在使用未定義屬性時引發異常,請確保在PropertyPlaceholderConfigurer中將「ignoreUnresolvablePlaceholders」設置爲false。