我们在春季这样访问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/