嗯,挺全乎兒的,Spring Boot 多環境配置都在這裡了,你喜歡哪種?
- 2020 年 11 月 13 日
- 筆記
- JAVA, springboot, 碼猿技術專欄
持續原創輸出,點擊上方藍字關注我

目錄
-
前言 -
Spring Boot 自帶的多環境配置 -
創建不同環境的配置文件 -
指定運行的環境
-
-
Maven 的多環境配置 -
創建多環境配置文件 -
定義激活的變數 -
pom 文件中定義 profiles -
資源過濾 -
總結
-
-
總結
前言
日常開發中至少有三個環境,分別是開發環境(dev
),測試環境(test
),生產環境(prod
)。
不同的環境的各種配置都不相同,比如資料庫,埠,IP
地址等資訊。
那麼這麼多環境如何區分,如何打包呢?
本篇文章就來介紹一下Spring Boot
中多環境如何配置,如何打包。
Spring Boot 自帶的多環境配置
Spring Boot 對多環境整合已經有了很好的支援,能夠在打包,運行間自由切換環境。
那麼如何配置呢?下面將會逐步介紹。
創建不同環境的配置文件
既然每個環境的配置都不相同,索性將不同環境的配置放在不同的配置文件中,因此需要創建三個不同的配置文件,分別是application-dev.properties
、application-test.properties
、application-prod.properties
。
「注意」:配置文件的名稱一定要是application-name.properties
或者application-name.yml
格式。這個name
可以自定義,主要用於區分。
此時整個項目中就有四個配置文件,加上
application.properties
。
指定運行的環境
雖然你創建了各個環境的配置文件,但是Spring Boot
仍然不知道你要運行哪個環境,有以下兩種方式指定:
配置文件中指定
在application.properties
或者application.yml
文件中指定,內容如下:
# 指定運行環境為測試環境
spring.profiles.active=test
以上配置有什麼作用呢?
如果沒有指定運行的環境,Spring Boot
默認會載入application.properties
文件,而這個的文件又告訴Spring Boot
去找test
環境的配置文件。
運行 jar 的時候指定
Spring Boot
內置的環境切換能夠在運行Jar
包的時候指定環境,命令如下:
java -jar xxx.jar --spring.profiles.active=test
以上命令指定了運行的環境是test
,是不是很方便呢?
Maven 的多環境配置
Maven
本身也提供了對多環境的支援,不僅僅支援Spring Boot
項目,只要是基於Maven
的項目都可以配置。
Maven
對於多環境的支援在功能方面更加強大,支援JDK版本
、資源文件
、作業系統
等等因素來選擇環境。
如何配置呢?下面逐一介紹。
創建多環境配置文件
創建不同環境的配置文件,分別是application-dev.properties
、application-test.properties
、application-prod.properties
。
加上默認的配置文件application.properties
同樣是四個配置文件。
定義激活的變數
需要將Maven
激活的環境作用於Spring Boot
,實際還是利用了spring.profiles.active
這個屬性,只是現在這個屬性的取值將是取值於Maven
。配置如下:
[email protected]@
profile.active
實際上就是一個變數,在maven
打包的時候指定的-P test
傳入的就是值。
pom 文件中定義 profiles
需要在maven
的pom.xml
文件中定義不同環境的profile
,如下:
<!--定義三種開發環境-->
<profiles>
<profile>
<!--不同環境的唯一id-->
<id>dev</id>
<activation>
<!--默認激活開發環境-->
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!--profile.active對應application.yml中的@profile.active@-->
<profile.active>dev</profile.active>
</properties>
</profile>
<!--測試環境-->
<profile>
<id>test</id>
<properties>
<profile.active>test</profile.active>
</properties>
</profile>
<!--生產環境-->
<profile>
<id>prod</id>
<properties>
<profile.active>prod</profile.active>
</properties>
</profile>
</profiles>
標籤<profile.active>
正是對應著配置文件中的@profile.active@
。
<activeByDefault>
標籤指定了默認激活的環境,則是打包的時候不指定-P
選項默認選擇的環境。
以上配置完成後,將會在IDEA的右側Maven
選項卡中出現以下內容:

可以選擇打包的環境,然後點擊package
即可。
或者在項目的根目錄下用命令打包,不過需要使用-P
指定環境,如下:
mvn clean package package -P test
maven
中的profile
的激活條件還可以根據jdk
、作業系統
、文件存在或者缺失
來激活。這些內容都是在<activation>
標籤中配置,如下:
<!--activation用來指定激活方式,可以根據jdk環境,環境變數,文件的存在或缺失-->
<activation>
<!--配置默認激活-->
<activeByDefault>true</activeByDefault>
<!--通過jdk版本-->
<!--當jdk環境版本為1.8時,此profile被激活-->
<jdk>1.8</jdk>
<!--當jdk環境版本1.8或以上時,此profile被激活-->
<jdk>[1.8,)</jdk>
<!--根據當前作業系統-->
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
資源過濾
如果你不配置這一步,將會在任何環境下打包都會帶上全部的配置文件,但是我們可以配置只保留對應環境下的配置文件,這樣安全性更高。
這一步配置很簡單,只需要在pom.xml
文件中指定<resource>
過濾的條件即可,如下:
<build>
<resources>
<!--排除配置文件-->
<resource>
<directory>src/main/resources</directory>
<!--先排除所有的配置文件-->
<excludes>
<!--使用通配符,當然可以定義多個exclude標籤進行排除-->
<exclude>application*.properties</exclude>
</excludes>
</resource>
<!--根據激活條件引入打包所需的配置和文件-->
<resource>
<directory>src/main/resources</directory>
<!--引入所需環境的配置文件-->
<filtering>true</filtering>
<includes>
<include>application.yml</include>
<!--根據maven選擇環境導入配置文件-->
<include>application-${profile.active}.yml</include>
</includes>
</resource>
</resources>
</build>
上述配置主要分為兩個方面,第一是先排除所有配置文件,第二是根據profile.active
動態的引入配置文件。
總結
至此,Maven
的多環境打包已經配置完成,相對來說挺簡單,既可以在IDEA
中選擇環境打包,也同樣支援命令-P
指定環境打包。
總結
本文介紹了Spring Boot 的兩種打包方式,每種方式有各自的優缺點,你更喜歡哪種呢?
源碼已經上傳,回復關鍵詞
多環境配置
獲取。