圖片和部分表述來自參考文章非原創
spring boot 加載配置文件
具體的順序就是 :
1、config/application.properties(項目根目錄中config目錄下) 2、config/application.yml 3、application.properties(項目根目錄下) 4、application.yml 5、resources/config/application.properties(項目resources目錄中config目錄下) 6、resources/config/application.yml 7、resources/application.properties(項目的resources目錄下) 8、resources/application.yml
application 和 bootstrap 文件的區別
bootstrap 從名字就感覺會比 application 早加載,官方文檔中的解釋 :
Spring Cloud 構建於 Spring Boot 之上,在 Spring Boot 中有兩種上下文,一種是 bootstrap, 另外一種是 application, bootstrap 是應用程序的父上下文,也就是說 bootstrap 加載優先於 applicaton。bootstrap 主要用於從額外的資源來加載配置信息,還可以在本地外部配置文件中解密屬性。這兩個上下文共用一個環境,它是任何Spring應用程序的外部屬性的來源。bootstrap 里面的屬性會優先加載,它們默認也不能被本地相同配置覆蓋。
因此,對比 application 配置文件,bootstrap 配置文件具有以下幾個特性。
- boostrap 由父 ApplicationContext 加載,比 applicaton 優先加載
- boostrap 里面的屬性不能被覆蓋
bootstrap/ application 的應用場景
- application 配置文件這個容易理解,主要用於 Spring Boot 項目的自動化配置。
- 使用 Spring Cloud Config 配置中心時,這時需要在 bootstrap 配置文件中添加連接到配置中心的配置屬性來加載外部配置中心的配置信息; -- 一些固定的不能被覆蓋的屬性 -- 一些加密/解密的場景;
自定義配置文件加載
- 令行參數 所有的配置都可以在命令行上進行指定,例如 :
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc
-
來自java:comp/env的JNDI屬性
-
Java系統屬性(System.getProperties())
-
操作系統環境變量
-
RandomValuePropertySource配置的random.*屬性值 由jar包外向jar包內進行尋找; 優先加載帶profile
-
jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
-
jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件 再來加載不帶profile
-
jar包外部的application.properties或application.yml(不帶spring.profile)配置文件
-
jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
-
@Configuration注解類上的@PropertySource
-
通過SpringApplication.setDefaultProperties指定的默認屬性 所有支持的配置加載來源;
參考資料
加載順序
- https://www.jianshu.com/p/3c615bd42799
- https://blog.csdn.net/weixin_41404773/article/details/82459993 application 和 bootstrap 文件的區別
- https://www.cnblogs.com/javastack/p/11003795.html