PropertyPlaceHolder在春天

Bas*_*stl 1 spring properties

我们在spring中访问java属性,如下所示:

<property name="fileSizeLimit" value="${someProperty}" />
Run Code Online (Sandbox Code Playgroud)

豆宣称

int fileSizeLimit = 9999;
Run Code Online (Sandbox Code Playgroud)

如果属性文件中缺少"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.

sou*_*ica 15

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

<property name="fileSizeLimit" value="${someProperty:9999}" />
Run Code Online (Sandbox Code Playgroud)

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

<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
Run Code Online (Sandbox Code Playgroud)

告诉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.
Run Code Online (Sandbox Code Playgroud)

我通常在占位符中使用SYSTEM_PROPERTIES_MODE_OVERRIDE和默认值,所以顺序是

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