SpringBoot 的 bootstrap 和 application 配置文件


SpringBoot 默認支持 properties 和 YAML 兩種格式的配置文件,並且有 bootstrap 和 application 兩種配置文件


兩者的區別

  • bootstrap 配置文件先於 application 配置文件被加載,會先創建初始化 Bootstrap Context,再創建初始化 Application Context,應用於更早期的配置信息,可以理解為系統配置
  • bootstrap 和 application 共享同一個 Environment,默認情況下,bootstrap 的配置不會被覆蓋,而 application 的配置項可以被覆蓋(比如被 application-dev 覆蓋,或被 java 命令行覆蓋)

應用 bootstrap 的例子

  • 比如從 Spring Cloud Config 和 Consul 獲取配置的時候,由於初始化 Application Context 的時候需要知道如何去 Config/Consul 獲取配置,所以 Config/Consul 基本信息就不能寫到 application.yml 等到 Application Context 初始化時才讀取,必須在 bootstrap.yml 里配置,這樣 Application Context 初始化時才能知道需要去 Config/Consul 獲取配置,並且知道 Config/Consul 的基本信息
  • 比如一些固定的不希望被覆蓋的屬性,如程序的名字
  • 比如一些加解密的場景

application 的配置可以有多個,比如 application.yml,application-dev.yml,application-prod.yml

在 application.yml 可以這樣指定

spring:
  profiles:
    active: dev

這樣 SpringBoot 在加載 application.yml 后還會加載 application-dev.yml
並且如果兩個文件有相同的配置項,那么 application.yml 的會被 application-dev.yml 的覆蓋


配置文件可以存在 4 個地方,按優先級從高到低是

  • 項目根目錄下的 config 文件夾
  • 項目根目錄
  • classpath 下的 config 文件夾
  • classpath

也可以在 java 命令指定

java -jar spring-boot-hello-1.0.0-SNAPSHOT.jar --spring.config.location=~/application.yml

還可以在 java 命令中覆蓋配置項

java -jar spring-boot-hello-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod --server.port=8081

這里指定了新的 port 和 profile




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM