目錄
概述?
同級目錄application配置文件優先級
application?以及bootstrap?優先級
不同級目錄配置文件優先級
外部配置加載順序
概述?
SpringBoot除了支持properties格式的配置文件,還支持另外兩種格式的配置文件。三種配置文件格式分別如下:
-
properties格式
-
yml格式
-
yaml格式
application.properties(properties格式)
server.port=80
?application.yml(yml格式)
server:port: 81
application.yaml(yaml格式)
server:port: 82
?yml和yaml文件格式就是一模一樣的,只是文件后綴不同,所以可以合并成一種格式來看。
yaml語法規則
大小寫敏感
屬性層級關系使用多行描述,每行結尾使用冒號結束
使用縮進表示層級關系,同層級左側對齊,只允許使用空格(不允許使用Tab鍵)
屬性值前面添加空格(屬性名與屬性值之間使用冒號+空格作為分隔)
#號 表示注釋
注意屬性名冒號后面與數據之間有一個空格
字面值、對象數據格式、數組數據格式 ?
同級目錄application配置文件優先級
application.properties ?> ?application.yml ?> ?application.yaml
每個配置文件中的項都會生效,只不過如果多個配置文件中有相同類型的配置會優先級高的文件覆蓋優先級的文件中的配置。如果配置項不同的話,所有的配置項都會生效。
application?以及bootstrap?優先級
bootstrap優先于application加載, 用于應用程序上下文的引導階段。由spring cloud?BootstrapApplicationListener在ApplicationEnvironmentPreparedEvent時進行加載。
可以將bootstrap配置理解為系統級別的參數配置,這些參數一般不會變更。
application配置可以理解為定義應用級別的參數,可以覆蓋替換bootstrap的配置信息。
application的屬性優先較高,加載時先加載bootstrap配置文件,再加載application配置文件?
不同級目錄配置文件優先級
加載1. classpath:/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? -- 優先級4. The classpath root
加載2. classpath:/config/???????????????????????? -- 優先級3. A classpath /config package
加載3. file:./?????????????????????????????????????????????-- 優先級2. The current directory
加載4. file:./config/? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-- 優先級1. A /config subdirectory of the current directory.
外部配置加載順序
SpringBoot也可以從以下位置加載配置:
優先級從高到低;
高優先級的配置覆蓋低優先級的配置,所有的配置會形成互補配置。
1.命令行參數
所有的配置都可以在命令行上進行指定;多個配置用空格分開; --配置項=值
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar
--server.port=8087 --server.context-path=/abc
2.來自java:comp/env的JNDI屬性
3.WDpUhJava系統屬性(System.getProperties())
4.操作系統環境變量
5.RandomValuePropertySource配置的random.*屬性值
6.jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
7.jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
8.jar包外部的application.properties或application.yml(不帶spring.profihttp://le)配置文件
9.jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
由jar包外向jar包內進行尋找,優先加載帶profile的,再加載不帶profile的。
10.@Configuration注解類上的@PropertySource
11.通過SpringApplication.setDefaultProperties指定的默認屬性