我們需要一起加載多個屬性文件,並將它們用作屬性的一個來源。 <util:properties>
允許您傳遞逗號分隔的文件列表,並且一切正常。所以,以下是很好的:當文件列表是參數時,使用Spring <util:properties />加載多個屬性文件的問題
<util:properties loaction="conf/file1.properties,conf/file2.properties,abc-*.properties" />
然而,在我們的情況下,屬性列表文件是不固定的,它來自於之前加載的另一個主屬性的文件。我們希望將該列表作爲參數傳遞給<util:properties>
,但它不起作用。
<util:properties location="${allPropertiesFiles}" />
凡${allPropertiesFiles}
被定義爲
allPropertiesFiles=conf/file1.properties,conf/file2.properties,abc-*.properties
失敗的原因是在文件列表中逗號。它將它們視爲一個文件名並引發FileNotFoundException。
我在想什麼時候Spring試圖用逗號分割這些文件,它看起來像在解析$ {allPropertiesFiles}之前發生的。例如,如果我按照以下方式執行,它可以正常工作,但對於我們來說這不是一個實際的解決方案,因爲我們不知道該列表中包含多少個文件。
<util:properties location="${propFile.location1},${propFile.location2},${propFile.location3}" />
UPDATE:
似乎在${...}
解決屬性值前是一個春天的問題與處理和分離與「」。我甚至嘗試過使用Spring EL來分割它,但是它再次解析有效的EL失敗,因爲它首先基於''分解它,然後評估表達式。以下示例在EL解析異常時失敗:
<util:properties location="#{'${allPropertiesFiles}'.split(',')}" />
僅供參考此觀察結果與Spring 4.2.x.任何建議,非常感謝。
您需要雙引號,因爲您將屬性文件列表作爲jvm參數傳遞,並且列表中逗號後面有一個空格。我的列表來自另一個屬性文件,如果我用「」包圍它,它將成爲屬性值的一部分。 – user3739116
其次,我試過你的例子,它只適用於我,如果列表作爲jvm arg與Spring 4.3.x傳遞。由於列表中的逗號,Spring的早期版本(例如4.2.x)仍然失敗。我們現在在Spring 4.2.x上,目前無法升級。第三,當我嘗試從由<'加載的屬性文件傳遞列表時,您的示例失敗。它看起來像Spring 4.3.x更好地處理jvm arg,不知道爲什麼。如果我錯了,請讓我知道。 –
user3739116