咱們在寫程序的時候會碰到各類環境(開發、測試、生產),於是,在咱們切換環境的時候,咱們須要手工切換配置文件的內容。這大大的加大了運維人員的負擔,同時會帶來必定的安全隱患。java
爲此,爲了能更合理地重寫各屬性的值,SpringBoot經過對數據文件的優先級進行定義,定義了不一樣的加載順序,從而解決了這個問題。安全
1 在命令行中傳入的參數。app
2. SPRING APPLICATION JSON中的屬性。 SPRING_APPLICATION—JSON是以JSON格式配置在系統環境變量中的內容。運維
3. java:comp/env中的JNDI 屬性。dom
4. Java的系統屬性, 能夠經過System.getProperties()得到的內容。微服務
5 操做系統的環境變量 。測試
6 經過random.*配置的隨機屬性。 spa
7 位於當前應用 jar 包以外, 針對不一樣{profile}環境的配置文件內容, 例如application-{profile}.properties或是YAML定義的配置文件。操作系統
8 位於當前應用 jar 包以內 , 針對不一樣{profile}環境的配置文件內容,例如application-{profile}.properties或是YAML定義的配置文件。命令行
9 位於當前應用jar包以外的application.properties和YAML配置內容。
10位於當前應用jar包以內的app口ca巨on.properties和YAL配置內容。
11在@Configura巨on註解修改的類中,經過@PropertySource註解定義的屬性。
12應用默認屬性,使用SpringApplication.setDefaultProper巨es 定義的內容。
優先級按上面的順序由高到低, 數字越小優先級越高。
能夠看到,其中第7項和第9項 都是從應用jar包以外讀取配置文件,因此,實現外部化配置的原理就是今後切入,爲其指定外部配置文件的加載位置來取代jar包以內的配置內容。 經過這樣的實現,咱們的工程在配置中就變得很是乾淨,只需在本地放置開發須要的配置便可, 而不用關心其餘環境的配置,由其對應環境的負責人去維護便可。
參考文檔:
《SpringCloud微服務實踐》(翟永超)