本文總結了springboot配置文件的原理以及多個配置文件生效的順序。
Springboot配置文件支持靈活的路徑和靈活的文件名,可以用壹個變量表達式概括如下:
部分源代碼如下:
當有多個配置文件滿足上述變量表達式時,會有壹個配置優先級。假設
當上述每個條件組合在壹起時,配置文件的最大數量如下,順序是從上到下:
獲取屬性時,從上到下遍歷上述文件生成的屬性資源對象PropertySource,如果遇到匹配的鍵就直接返回。
總結壹下:如果同壹個鍵的屬性只出現壹次,直接取值就可以了。如果同壹個鍵的屬性出現多次,則取順序最高的屬性資源對象。此外,這些文件都是可選的。
請註意,如果在同壹位置配置了多個具有相同文件名的文件,則只會選擇壹個文件。例如,在classpath:/中,有兩個文件application.yml,如下所示:
根據classloader的類路徑列表,只會選擇出現的第壹個文件。因為springboot在加載配置文件時在底部使用了以下方法:
這兩個方法將只獲得classloader類的ucp屬性中的第壹個匹配值。如果對springboot本身的機制不滿意,想獲取classpath:/ path下applicaiton.yml的所有文件,可以使用以下方法:
本文總結了springboot配置文件的原理以及多個配置文件生效的順序。如果添加了配置文件或者在配置文件中添加了屬性但沒有生效,可以參考上面springboot配置文件的表達式和配置文件的有效順序進行故障排除。
後面會有文章討論如何基於springboot的配置原理實現壹個自定義的配置讀取方法。