spring.profiles.active和spring.profiles.include的使用與區別


spring.profiles.active和spring.profiles.include的區別與使用

  • 業務場景
  • 優化方式
    • spring.profiles.active屬性
      • 啟動時指定:
    • spring.profiles.include屬性
      • 配置方法:
      • 配置的位置和區別:
  • 用示例來使用和區分
    • 測試一:
    • 測試二:
    • 測試三:

 

業務場景

一套程序可能會被部署到不同的環境。開發、測試、生產環境有不同的配置信息,包括jdbc地址、ip、端口等。如果在同一個配置文件中,每次部署去改配置,會非常麻煩且容易出錯。

優化方式

spring.profiles.active屬性

一個好方法就是創建不同的配置文件,且命名規則遵循application-${profile}.properties,例如:

  1. 開發環境配置文件:application-dev.properties
  2. 測試環境配置文件:application-test.properties
  3. 生產環境配置文件:application-prod.properties

當然,我們不能刪除項目最頂層的application.properties配置,在該文件中,根據部署場景不同,切換不同的配置文件:配置spring.profiles.active,屬性值為${profile}

  1. spring.profiles.active=dev:啟用application-dev.properties
  2. spring.profiles.active=test:啟用application-test.properties
  3. spring.profiles.active=prod:啟用application-prod.properties

啟動時指定:

在執行有參啟動時,可以在命令中進行指定要選用的配置文件,例如:
java -jar xx.jar --spring.profiles.active=test
這個命令的優先級是最高的,即使application.properties中已經配置spring.profiles.active=dev,最終程序還是會用application-test.properties配置文件。

spring.profiles.include屬性

再進一步,對於開發環境,想用不同的配置文件存儲開發環境不同的配置,例如:
application-dev1.properties中存儲jdbc信息
application-dev2.properties中存儲ip、端口信息
即在啟用application-dev.properties開發環境(主)配置文件時,同時啟用application-dev1.properties和application-dev2.propertie。
那么,可以使用spring.profiles.include屬性:同時啟用其他的profile

配置方法:

  1. 若是properties文件:spring.profiles.include=dev1,dev2
  2. 若是yaml文件中,
    spring.profiles.include:
    -dev1
    -dev2
    或者:spring.profiles.include:dev1,dev2

配置的位置和區別:

  1. 配置方式一:application.properties中,配置spring.profiles.active=dev的同時指定spring.profiles.include=dev1,dev2
  2. 配置方式二:application.properties中,配置spring.profiles.active=dev,application-dev.properties中,配置spring.profiles.include=dev1,dev2。使用application-dev.properties時自動就激活了dev1、dev2兩個文件,不用再次指定。(個人認為第二種方法更好)

區別:

  1. 第一種方式啟動時,控制台打印The following profiles are active:dev1,dev2,dev
  2. 第二種方式啟動時,控制台打印The following profiles are active:dev, dev1,dev2
    按照順序,后面的覆蓋前面的

用示例來使用和區分

在某個工程里,我依據開發、生產環境,以及它們要同時激活的配置,創建了多個配置,分別如下:
application-dev.properties配置:

my.name=dev my.height=170 #同時觸發dev1和dev2的激活 spring.profiles.include=dev1,dev2 

application-dev1.properties配置:

my.name=dev1 my.height=171 

application-dev2.properties配置:

my.name=dev2 #my.height=172 

application-prod.properties配置:

my.name=prod my.height=180 

application-prod1.properties配置:

my.name=prod1 my.height=181 

application-prod2.properties配置:

my.name=prod2 my.height=182 

測試一:

在application.properties配置文件中,指定

#激活的是開發環境配置文件
spring.profiles.active=dev 

啟動時不指定參數
結果:打印的內容為:姓名:dev2,身高:171
原因:

  1. 先加載application.properties
  2. 再加載application-dev.properties,
    my.name=dev
    my.height=170
  3. 加載application-dev1.properties,
    my.name=dev1
    my.height=171
  4. 加載application-dev2.properties,
    my.name=dev2
    my.height=171

測試二:

在測試一的基礎上,啟動時指定參數:–spring.profiles.active=prod
優先級最高,會使用生產環境配置文件
結果:打印的內容為:姓名:prod,身高:180

測試三:

在application.properties配置文件中,指定

#激活的是生產環境配置文件
spring.profiles.active=prod #同時觸發prod1和prod2的激活 spring.profiles.include=prod1 

啟動時不指定參數
結果:
The following profiles are active: prod1,prod2,prod
打印的內容為:姓名:prod,身高:180

 
 
 


免責聲明!

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



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