SpringBoot配置加載順序

通常咱們會將SpringBoot應用須要的配置內容放在項目工程中,而後經過spring.profiles.active或是經過Maven來實現多環境的支持.可是,當團隊逐漸壯大,分工愈來愈細以後,每每不須要讓開發人員知道測試或生產環境的細節,而是但願由每一個環境各自的負責人(QA或運維)來集中維護這些信息,那麼若是仍是以則海洋的方式存儲配置內容,對於不一樣環境配置的修改就不得不去獲取工程內容來修改這些配置內容,當應用很是多的時候就變得很是不方便.同時,配置內容對開發人員均可見,這自己也是一種安全隱患.對此,出現了不少將配置內容外部化的框架和工具,Spring Cloud Config就是其中之一.爲了可以更合理的重寫各個屬性的值,SpringBoot使用下面的順序來加載配置:java

1.在命令行中傳入的參數;

2.SPRING_APPLICATION_JSON 中的屬性。SPRING_APPLICATION_JSON 是以JSON 格式配置在系統環境變量中的內容;

3.java:comp/env 中的 JNDI 屬性;

4.java 的系統屬性,能夠經過System.getProperties()得到的內容;

5.操做系統的環境變量。

6.經過random.*配置的隨機屬性;

7.位於當前應用jar包以外,針對不一樣{profile}環境的配置文件內容,例如 applicaiton-{profile}.properties 或是 yaml 定義的配置文件;

8.位於當前應用jar包以內,針對不一樣{profile}環境的配置文件內容,例如 applicaiton-{profile}.properites 或是 yaml 定義的配置文件;

9.位於當前應用jar包以外的 application.properties 和yaml配置內容;

10.位於當前應用jar包以內的 application.properties 和yaml配置內容;

11.在@Configration註解修改的類中,經過@PropertySource註解定義的屬性;

12.應用默認屬性,使用SpringApplication.setDefaultProperties定義的內容;

優先級按照上面的順序由高到低,數字越小優先級越高。spring

能夠看到,第7項到第9項都是從應用jar包以外讀取配置文件,因此,實現外部化配置的原理就是今後切入,爲其指定外部配置文件的加載位置來取代jar包以內的配置內容。經過這樣的實現,咱們的工程在配置中就變得很是乾淨,只需在本地放置開發須要的配置便可,而不須要其餘環境的配置,由其對應環境的負責人去維護便可。安全

相關文章
相關標籤/搜索