spring boot 項目的配置文件加載順序
加載順序如下
- 在命令行中傳入的參數(shù)。
- SPRING_APPLICATION_JSON 中的屬性。SPRING_APPLICATION_JSON 是以JSON格式配置在系統(tǒng)環(huán)境變量中的內(nèi)容。
- java:comp/env中的JNDI屬性。
- Java的系統(tǒng)屬性,可以通過System.getProperties()獲得的內(nèi)容。
- 操作系統(tǒng)的環(huán)境變量。
- 通過random.*配置的隨機屬性。
- 位于當(dāng)前應(yīng)用 jar 包之外,針對不同{profile}環(huán)境的配置文件內(nèi)容,例如application-{profile}.properties或是YAML定義的配置文件。
- 位于當(dāng)前應(yīng)用 jar 包之內(nèi),針對不同{profile}環(huán)境的配置文件內(nèi)容,例如application-{profile}.properties或是YAML定義的配置文件。
- 位于當(dāng)前應(yīng)用jar包之外的application.properties和YAML配置內(nèi)容。
- 位于當(dāng)前應(yīng)用jar包之內(nèi)的application.properties和YAML配置內(nèi)容。
- 在@Configuration注解修改的類中,通過@PropertySource注解定義的屬性。
- 應(yīng)用默認(rèn)屬性,使用 SpringApplication.setDefaultProperties 定義的內(nèi)容。
說明
優(yōu)先級按上面的順序由高到低,數(shù)字越小優(yōu)先級越高
當(dāng)加載過程中發(fā)現(xiàn)有相同屬性已經(jīng)加載過了,則不會再覆蓋值
可以看到,其中第7項和第9項都是從應(yīng)用jar包之外讀取配置文件,
所以,實現(xiàn)外部化配置的原理就是從此切入,為其指定外部配置文件的加載位置來取代jar包之內(nèi)的配置內(nèi)容。
通過這樣的實現(xiàn),我們的工程在配置中就變得非常干凈,只需在本地放置開發(fā)需要的配置即可,而不用關(guān)心其他環(huán)境的配置,由其對應(yīng)環(huán)境的負(fù)責(zé)人去維護即可。
這也是spring cloud config實現(xiàn)的機制基礎(chǔ)
摘抄自<<Spring Cloud微服務(wù)實戰(zhàn)>>
官網(wǎng)上的:
https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-external-config.html