A. springboot配置文件總結
springboot 本身支持多種靈活的配置方式,為開發 springboot 程序帶來了很大的靈活性和擴展性,但是同時由於太靈活,經常會導致明明配置了相關屬性,卻沒有生效。
本文總結了 springboot 配置文件的原理以及多個配置文件生效的順序。
springboot 配置文件支持靈活的路徑,以及靈活的文件名,用一個變數表達式總結如下:
部分源碼如下:
當滿足上述變數表達式的配置文件有多個時,會有一個配置的優先順序。假設
上面每個條件組合起來,則最多有配置文件如下,且順序從上到下:
獲取屬性時,按從上到下的順序遍歷由上述文件生成的屬性資源對象 PropertySource ,如果遇到匹配的key直接返回。
總結一下:就是如果同一個key的屬性只出現一次,則直接取該值即可。如果同一個key的屬性出現多次,則取順序靠前的屬性資源對象。另外其中每個文件都是可選的。
需要注意的一點是:如果在同一個 location 下配置了多個文件名一樣的文件,則只會取一個,比如在 classpath:/ ,有如下兩個文件 application.yml :
則只會根據 classloader 的 classpath 列表,選取第一個出現的文件。因為 springboot 載入配置文件時最底層是使用的下面的方法:
這兩個方法只會獲取 classloader 類的 ucp 屬性裡面第一個匹配到的值。如果對 springboot 自身的機制不滿意,想獲取所有的classpath:/路徑下面的 applicaiton.yml 文件,可以使用下面的方法:
本文總結了 springboot 配置文件的原理以及多個配置文件生效的順序。如果存在增加了配置文件或者在配置文件裡面增加了屬性卻沒有生效,可以參考上面的 springboot 配置文件表達式和配置文件生效順序進行排查。
後面還會有一篇文章討論基於 springboot 配置原理如何實現自定義的配置讀取方式。
B. springboot的配置文件有哪幾種
Spring Boot的配置文件主要有兩種:properties文件和yaml文件。
1. properties文件:這是Spring Boot的默認配置文件格式,它採用的是鍵值對的形式存儲配置信息,鍵值對之間通過等號「=」進行連接。比如:
arino
server.port=8080
spring.datasource.url=jdbc:mysql://localhost/test
這種格式的優點在於它的簡潔易讀,上手難度低。缺點則是當配置信息復雜且數量眾多時,容易變得混亂。
2. yaml文件:YAML是一種數據序列化格式,通常用於配置文件。Spring Boot也支持YAML格式的配置文件,它的文件擴展名通常為.yml或.yaml。YAML文件的結構更清晰,可以更好地組織復雜的配置信息。比如:
yml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost/test
YAML文件的優點在於它的結構清晰,易於組織和管理復雜的配置信息。尤其是在處理多級配置的時候,YAML的層級結構能夠直觀地體現出配置的層級關系。缺點則是YAML的語法相較於properties稍顯復雜,對新手可能有一定的學習門檻。
總結:Spring Boot的這兩種配置文件格式各有優缺點,開發者可以根據自己的需求和習慣選擇合適的配置文件格式。對於簡單的配置信息,properties文件是一個不錯的選擇;而對於復雜的配置信息,YAML文件則能夠更好地進行組織和管理。