4.Profile(多環境配置)
- 2022 年 3 月 6 日
- 筆記
- springboot
在實際的項目開發中,一個項目通常會存在多個環境,例如,開發環境、測試環境和生產環境等。不同環境的配置也不盡相同,例如開發環境使用的是開發數據庫,測試環境使用的是測試數據庫,而生產環境使用的是線上的正式數據庫。
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,代碼如下。
-
#默認配置 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
三、激活 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