如今咱們已經知道,咱們能夠經過在運行jar時提供一系列的參數來定製SpingBoot爲咱們默認作好的設置。若是咱們要定製的屬性不少,在實際開發中,你可能會須要覆蓋上百個SpringBoot的默認設置,若是這些設置寫在java -jar 運行命令中一點都不優雅,也不利於維護。那如何是好?java
SpringBoot提供了專門的屬性配置文件和配置接口。redis
SpringBoot默認加載的屬性配置文件名稱爲application,就像你用Spring框架同樣,也有一個全局的配置文件。spring
你能夠在resource目錄下建立application.properties,把須要定製的SpringBoot屬性寫入其中,
好比你要修改SpringBoot啓動的默認端口,就加入server.port屬性;要修改redis的默認端口,能夠加入spring.redis屬性;要修改rabbitmq的鏈接地址,能夠加入spring.rabbitmq.host屬性,就像這樣:
編程
重啓項目後,就看到默認端口已經修改成8081。這跟使用啓動命令java -jar運行道理是同樣的,只不過看起來更利於維護。若是你以爲就這麼幾個參數,直接寫在啓動命令中豈不更省事?實際項目中須要進行設置的內容每每不少,甚至還要複雜。springboot
所以,本身定義application.properties來管理框架定製屬性的意義就很重要了。app
並且,application.properties的做用遠不止於此。框架
他還能方便區分和管理不一樣環境的配置。開發人員常常要在本地環境、測試環境甚至生產環境中切換,以便更好的開發或排查問題。在之前,咱們多是經過在application.properties中註釋掉一部分並寫上另外一部份內容的方式來切換不一樣環境。然而,如今有更優雅的方式。編程語言
能夠經過再application後添加不一樣的後綴名稱來區分不一樣項目環境,不用所有雜糅在一個配置文件中。好比這樣:測試
通常約定,dev表明開發環境,test表明測試環境, prod表明生產環境。經過不一樣的後綴名稱,不一樣環境配置一目瞭然。.net
最後在根配置文件,也就是application.properties中添加 spring.profiles.active=dev來指定啓用哪一個配置,好比這裏的dev就對應application-dev.properties,也就是咱們約定的開發環境配置。
那若是application.properties中和application-dev.properties都有相同的配置屬性,結果如何呢?
答案是,spring.profiles.active對應了哪一個就是哪一個生效,除非那個配置文件中沒有定義的屬性,纔會被application.properties中定義的覆蓋,若是兩個文件中都沒有,則沿用springboot默認設置。
另外,附帶提一下,springboot配置文件還有一種yaml格式,好比上述的application.properties能夠命名爲application.yml,做用徹底相同,只不過yaml文件是用樹形結構來編寫屬性,就像這樣:
而當項目中同時存在application.properties和application.yml時,起做用的是application.properties。 同一目錄下,properties配置優先級 高於 YAML配置優先級。
**使用建議**
一、儘可能統一使用一種格式的配置文件,儘可能不要兩種格式混用。
二、properties雖然傳統並且好用,但官方更推薦用yaml格式,由於樹形結構可讀性更強,這也是不少編程語言的趨勢。
(yaml的編寫語法和規範,後續會繼續談到)
三、通常狀況下,咱們都會放在resource根目錄下,也能夠放在resource/config目錄下,這種狀況下,優先級最高的是resource/config中的配置文件,這也是官方推薦的方式。所以,建議你們將springboot自己的配置文件放在resource/config目錄下。
最後,附上完整的配置參數清單,須要修改默認的哪些設置,對照這個清單上找到,而後application文件中覆蓋默認屬性接口。springboot的這些屬性不少是要另外在pom中添加相關的starter才能使用這些功能和參數定製。
定製參數列表:https://blog.csdn.net/baidu_38083619/article/details/89893053