SpringBoot之多Profile配置


近來在利用閑暇時間鞏固下SpringBoot的基本知識,然后自己也做一些筆記,整理下當時所學知識,后面就干脆寫到這里來了。

多Profile配置文件

在SpringBoot主配置文件編寫的時候,文件名可以是application-{profile}.properties/yml。

默認使用的是application.properties配置文件的配置。

 1 applicaiton.properties 2 application-dev.properties 3 application-test.properties 4 application-prod.properties 

激活指定配置文件

1、主配置文件中指定激活的profile

如果是properties格式的配置文件,那么可以在主配置文件中這樣指定激活的profile:

spring.profiles.active = dev

如果是yml格式的配置文件,你可以用“---”來划分文檔塊,每個文檔塊都被看作是一個profile,你可以在主文檔塊中指定生效的profile:

 1 server:
 2   prot: 8081
 3 spring:
 4   profiles:
 5     active: dev # 指定激活哪個配置文件
 6 
 7 # yml格式配置文件中,用三個橫線來區分文檔塊
 8 # 第一個文檔塊表示主文檔塊,並同時指定后續生效的是哪個文檔塊
 9 
10 ---
11 # 第二個文檔塊
12 server:
13   port: 8082
14 spring:
15   profiles: dev # 聲明文檔塊類型
16 
17 ---
18 # 第三個文檔塊
19 server:
20   port: 8083
21 spring:
22   profiles: dev

2、命令行激活

在實際生產環境中直接使用命令行啟動項目,啟動的同時可以指定激活的profile:

java -jar --spring.profiles.active=dev my-spring-boot-app.1.0.0.jar

3、設置虛擬機參數激活

同樣,你可以通過設置Java虛擬機參數的方式來激活指定profile:

[vm options:] -Dspring.profiles.action=dev

IDEA編輯器設置:

命令行指定的方式和虛擬機參數設置的方式指定,都可以在IDEA的運行設置中進行配置,如下圖:

加載位置與順序

SpringBoot啟動會掃描以下位置的application.properties/yml文件作為spring boot的默認配置文件:

file:./config/
file:./
classpath:/config/
classpath:/

以上是按照優先級從高到低的順序,所有位置的文件都會被加載,高優先級配置內容會覆蓋低優先級配置的內容,並形成互補配置;當然,我們也可以通過spring.config.location來改變默認配置。

上面的:

  • file: 指當前項目根目錄
  • classpath: 指當前項目的resources目錄

給出一個圖例:

注意:maven打包是不能把src外面的兩個application.properties文件打到jar包里的。

在項目打包好之后,我們可以通過命令行參數的形式,啟動項目的時候來指定配置文件的新位置,指定配置文件和默認加載的這些配置文件會共同生效,並形成互補配置。

這在運維的時候很有用,因為可以通過命令行的方式指定生效的配置文件,較為靈活。

外部配置

SpringBoot還支持多種外部配置方式,生效優先級從高到低,高優先級的配置覆蓋低優先級的配置,所有的配置形成互補配置

  1. 命令行參數
  2. 來自java:comp/env的JNDI屬性
  3. Java系統屬性(System.getProperties())
  4. 操作系統環境變量
  5. RandomValuePropertySource配置的ramdom.*屬性值
  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.profile)配置文件
  9. jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
  10. @Configuration注解類上的@PropertySource
  11. 通過SpringApplication.setDefaultProperties指定的默認屬性

其實在官網有17種這樣的配置說明,可以從下面進入:

https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-external-config.html

重點關注上面列舉的1、6、7、8、9這幾項,生效的配置文件,都是由jar包外向jar包內進行尋找的,優先加載帶profile,再加載不帶profile的。比如有個application.properties的配置文件和xxx.jar放置在同一個目錄,那么項目啟動時一定是先加載這個application.properties文件,再去加載xxx.jar里面的配置文件的。

參考資料

1、https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/


免責聲明!

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



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