我不熟悉的$的語法(至少據我可以告訴。){值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
也許更新可以幫助... –