我们在 spring 中访问一个 java 属性,如下所示:
<property name="fileSizeLimit" value="${someProperty}" />
豆子声明
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 says:
可以通过“属性”定义默认属性值,以进行覆盖定义
在属性文件中可选。配置程序还将检查系统属性
(例如“user.dir”)如果它无法解析具有任何指定的占位符
特性。这可以通过“systemPropertiesMode”进行定制。
这是否设置了查找属性的顺序?我在哪里配置这个?
蒂亚,巴斯特尔。
对于第一个问题,您可以使用以下语法设置占位符的默认值,其中 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 和默认值,因此顺序是
- 系统属性
- 属性文件
- 占位符默认值
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)