我不熟悉的$的语法(至少据我可以告诉。){值1:值2}占位符
这是春季表达语言的PropertySourcesPlaceholderConfigurer
备用价值机制。 value2
用作value1
的默认值。如果value1
存在,它将被使用。否则,将使用value2
,在这种情况下,value2
只是一个字面意思。
${process.file.thing:propname.server}
在这种情况下,春季首先尝试解决一个名为从环境process.file.thing
财产。如果成功,它将使用该值。否则,将使用propname.server
文字。
PropertyPlaceholderHelper
的parseStringValue
方法负责解决默认值。此方法是这样的:
String propVal = placeholderResolver.resolvePlaceholder(placeholder);
if (propVal == null && this.valueSeparator != null) {
int separatorIndex = placeholder.indexOf(this.valueSeparator);
if (separatorIndex != -1) {
String actualPlaceholder = placeholder.substring(0, separatorIndex);
String defaultValue = placeholder.substring(separatorIndex + this.valueSeparator.length());
propVal = placeholderResolver.resolvePlaceholder(actualPlaceholder);
if (propVal == null) {
propVal = defaultValue;
}
}
}
该特征已经描述here在PlaceholderConfigurerSupport
的Javadoc中:
默认属性值可以全局通过属性属性被定义为每个配置器 实例,或上每个属性使用默认值分隔符 ,默认为“:”, 可通过setValueSeparator(String)
进行定制。
感谢。我仍然无法在春季文档中找到任何迹象,这是令人讨厌的。你会认为像这样的功能将被记录。好吧。 – user1071914
也许更新可以帮助... –