Spring Boot 允許你從外部加載配置,這樣的話,就可以在不同的環境中使用相同的代碼,支持的外部配置源包括:Java屬性檔案、YAML檔案、環境變數、命令列引數,
用@Value注解可以將屬性值直接注入到beans中,命令列引數以 -- 開頭
組態檔加載的順序如下:
- Application properties packaged inside your jar (application.properties and YAML variants)
- Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)
- Application properties outside of your packaged jar (application.properties and YAML variants)
- Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)
應用程式啟動的時候,Spring Boot 會自動從以下位置查找并加載 application.properties 和 application.yaml 檔案:
- The classpath root
- The classpath /config package
- The current directory
- The /config subdirectory in the current directory
- Immediate child directories of the /config subdirectory
查找順序按優先級來,后面的可以覆寫前面的,檔案中的每一項會作為PropertySources被添加到Spring Environment
如果你不想用"application"作為組態檔名稱,可以在環境屬性中通過spring.config.name來指定,還可以使用spring.config.location來顯式指定組態檔的位置(檔案路徑或目錄用逗號分隔)
注意,spring.config.name 和 spring.config.location 必須定義為一個環境屬性(通常是一個OS環境變數、一個系統屬性或一個命令列引數)
如果 spring.config.location 指定的是一個目錄,那么必須以 / 結尾
無論直接指定檔案還是包含在目錄中,組態檔必須在其名稱中包含檔案擴展名,通常,擴展名支持 .properties, .yaml, .yml
舉個栗子
指定單個檔案
$ java -jar myproject.jar --spring.config.name=myproject
指定多個位置
$ java -jar myproject.jar --spring.config.location=optional:classpath:/default.properties,optional:classpath:/override.properties
默認情況下,如果指定的位置不存在,則會報錯,如果你不確定它是否存在,使用使用 optional: 前綴
例如:
optional:classpath:/custom-config/,optional:file:./custom-config/
Profile Specific Files
Spring Boot 會嘗試加載按照命名規約 application-{profile} 的檔案,我們把這樣的檔案稱為Profile-specific檔案,
例如,如果你激活了一個名稱為prod的profile,并且使用YAML檔案,那么 application.yml 和 application-prod.yml 都會被嘗試加載,
Profile-specific檔案必須要和application.properties在相同的位置,而且profile-specific檔案中的配置項會覆寫非profile-specific檔案中相同的配置項,如果有多個profile-specific檔案被激活,則后面會覆寫前面的,
舉個例子,假設spring.profiles.active=prod,live,那么application-prod.properties中的配置項會被application-live.properties中的同名配置項覆寫,如果沒有明確指定激活哪個profile,則application-default會被考慮激活,
YAML 檔案
考慮下面的組態檔
hello:
world: "hehe"
my:
roles:
- "admin"
- "guest"
轉換成properties檔案應該是:
hello.world=hehe my.roles[0]=admin my.roles[1]=guest
Spring Framework提供了兩個方便的類,可以用來加載YAML檔案,YamlPropertiesFactoryBean 將 YAML 作為 Properties 加載,而 YamlMapFactoryBean 將 YAML 作為一個 Map 加載,
可以用@Value注解將屬性值注入到bean中
@Value("${hello.world}")
private String wahaha;
@Value("${my.roles[1]}")
private String roles1;
劃重點
1、支持四種外部配置源:Java屬性檔案、YAML檔案、環境變數、命令列引數;
2、組態檔查找位置,依次為:
(1) classpath 根路徑
(2) classpath 根路徑下config目錄
(3) jar包當前目錄
(4) jar包當前目錄的config目錄
(5) /config子目錄的直接子目錄
3、組態檔加載順序:
(1) 當前jar包內部的application.properties和application.yml
(2) 當前jar包內部的application-{profile}.properties 和 application-{profile}.yml
(3) 參考的外部jar包的application.properties和application.yml
(2) 參考的外部jar包的application-{profile}.properties 和 application-{profile}.yml
4、后面的可以覆寫前面的同名配置項

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-files
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/220558.html
標籤:其他
