伴隨着團隊的不斷壯大,往往不需要開發人員知道測試或者生產環境的全部配置細節,比如數據庫密碼,帳號信息等。而是希望由運維或者指定的人員去維護配置信息,那么如果要修改某項配置信息,就不得不去修改項目中的文件,導致運維人員有要維護項目代碼,造成職責不清,權限不清的問題。
因此可以將配置文件外部化(這里不做介紹),使用配置文件外部化(比如使用Spring Cloud Config來管理)就需要了解Spring Boot對配置文件的加載機制。
Spring Boot的屬性加載順序,
由優先級高到優先級低:
- 在命令行中傳入的參數;
- SPRING_APPLICATION_JSON中的屬性,SPRING_APPLICATION_JSON是以JSON格式配置在系統環境變量中的內容;
- java:comp/env中的JNDI屬性;
- Java的系統屬性,可以通過System.getProperties()獲得的內容;
- 操作系統的環境變量;
- 通過random.*配置的隨機屬性;
- 位於當前應用Jar包之外,針對不同{profile}環境的配置文件內容,例如application-{profile}.properties或者yaml定義的配置文件;
- 位於當前應用Jar包之內,針對不同{profile}環境的配置文件內容,例如application-{profile}.properties或是yaml定義的配置文件;
- 位於當前應用Jar包之外的application.properties和yaml配置內容;
- 位於當前應用Jar包之內的application.properties和yaml配置內容;
- 在@Configuration注解修改類中,通過@PropertySource注解定義的屬性;
- 應用默認屬性,使用SpringApplication.setDefaultProperties定義的內容。