4.Profile(多環境配置)

在實際的項目開發中,一個項目通常會存在多個環境,例如,開發環境、測試環境和生產環境等。不同環境的配置也不盡相同,例如開發環境使用的是開發數據庫,測試環境使用的是測試數據庫,而生產環境使用的是線上的正式數據庫。

Profile 為在不同環境下使用不同的配置提供了支持,我們可以通過激活、指定參數等方式快速切換環境。

一、多 Profile 文件方式

Spring Boot 的配置文件共有兩種形式:.properties  文件和 .yml 文件,不管哪種形式,它們都能通過文件名的命名形式區分出不同的環境的配置,文件命名格式為:

application-{profile}.properties/yml

其中,{profile} 一般為各個環境的名稱或簡稱,例如 dev、test 和 prod 等等。

properties 配置

在 helloworld 的 src/main/resources 下添加 4 個配置文件:

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

在 applcation.properties 文件中,指定默認服務器端口號為 8080,並通過以下配置激活生產環境(prod)的 profile。

#默認端口號
server.port=8080


#激活指定的profile
spring.profiles.active=prod
 

在 application-dev.properties 中,指定開發環境端口號為 8081,配置如下

# 開發環境
server.port=8081

 

在 application-test.properties 中,指定測試環境端口號為 8082,配置如下。

# 測試環境
server.port=8082

在 application-prod.properties 中,指定生產環境端口號為 8083,配置如下。

# 生產環境
server.port=8083

 

重啟 Spring Boot 主啟動程序,控制台輸出如下圖。

圖1:在配置文件指定激活 prod Profile

通過上圖可以看到,我們指定的生產環境(prod) Profile 生效了,且服務器端口為 8083。

yml 配置

與 properties 文件類似,我們也可以添加 4 個配置文件:

  • application.yml:默認配置
  • application-dev.yml:開發環境配置
  • application-test.yml:測試環境配置
  • application-prod.yml:生產環境配置

在 applcation.yml 文件中指定默認服務端口號為 8080,並通過以下配置來激活開發環境的 profile。

#默認配置
server:
port: 8080


#切換配置
spring:
profiles:
active: dev #激活開發環境配置

在 application-dev.yml 中指定開發環境端口號為 8081,配置如下。

#開發環境
server:
port: 8081
 

在 application-test.yml 中指定測試環境端口號為 8082,配置如下。

#測試環境
server:
port: 8082

在 application-prod.yml 中指定生產環境端口號為 8083,配置如下。

#生產環境
server:
port: 8083

重啟 Spring Boot 主程序,查看控制台輸出,如下圖。
 

圖2:YAML 文件激活 dev Profile

通過上圖可以看到,我們指定的開發環境(dev) Profile 生效了,且服務器端口為 8081。

二、多 Profile 文檔塊模式

在 YAML 配置文件中,可以使用「—」把配置文件分割成了多個文檔塊,因此我們可以在不同的文檔塊中針對不同的環境進行不同的配置,並在第一個文檔塊內對配置進行切換。

以 helloworld 項目為例,修改 application.yml ,配置多個文檔塊,並在第一文檔快內激活測試環境的 Profile,代碼如下。

  1. #默認配置
    server:
    port: 8080
    
    
    #切換配置
    spring:
    profiles:
    active: test
    
    
    ---
    #開發環境
    server:
    port: 8081
    
    
    spring:
    config:
    activate:
    on-profile: dev
    ---
    #測試環境
    server:
    port: 8082
    
    
    spring:
    config:
    activate:
    on-profile: test
    ---
    #生產環境
    server:
    port: 8083
    
    
    spring:
    config:
    activate:
    on-profile: prod

重啟 Spring Boot 主啟動程序,查看控制台輸出,如下圖。

圖3:Spring Boot yml 多文檔塊激活 Profile

通過上圖可以看到,我們指定的測試環境(test) Profile 生效了,且服務器端口為 8082。

三、激活 Profile

除了可以在配置文件中激活指定 Profile,Spring Boot 還為我們提供了另外 2 種激活 Profile 的方式:

  • 命令行激活
  • 虛擬機參數激活

命令行激活

我們可以將 Spring Boot 項目打包成 JAR 文件,並在通過命令行運行時,配置命令行參數,激活指定的 Profile。

我們還以 helloworld 為例,執行以下 mvn 命令將項目打包。

  • mvn clean package

項目打包完成,結果如下圖。

圖4:Spring Boot 打包結果

打開命令行窗口,跳轉到 JAR 文件所在目錄,執行以下命令,啟動該項目,並激活開發環境(dev)的 Profile。

  • java -jar helloworld-0.0.1-SNAPSHOT.jar –spring.profiles.active=dev

以上命令中,–spring.profiles.active=dev 為激活開發環境(dev)Profile 的命令行參數。

執行結果如下圖。

圖5:Spring Boot 命令行激活 Profile

虛擬機參數激活

我們還可以在 Spring Boot 項目運行時,指定虛擬機參數來激活指定的 Profile。

以 helloworld 為例,將該項目打包成 JAR 文件後,打開命令行窗口跳轉到 JAR 所在目錄,執行以下命令,激活生產環境(prod)Profile。

  • java -Dspring.profiles.active=prod -jar helloworld-0.0.1-SNAPSHOT.jar

以上命令中,-Dspring.profiles.active=prod 為激活生產環境(prod)Profile 的虛擬機參數。

執行結果如下圖。


圖6:Spring Boot 虛擬機參數激活生產環境 Profile