的PropertyPlaceHolder

的PropertyPlaceHolder

我们在春季这样访问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,巴斯特尔。

最佳答案

对于第一个问题,可以使用以下语法为占位符设置默认值,其中默认值为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和默认值,因此顺序为


系统属性
属性文件
占位符默认

关于spring - Spring 的PropertyPlaceHolder,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8214862/

10-09 21:50