Spring Boot 多環境配置
參考
https://xie.infoq.cn/article/96aaa8312c32978406393e2ef
-
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,如下:
標籤<profile.active>正是對應著配置檔案中的@profile.active@。
以上配置完成後,將會在 IDEA 的右側Maven選項卡中出現以下內容:
<!--定義三種開發環境-->
<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選項卡中出現以下內容:
![image](https://img2020.cnblogs.com/blog/221549/202111/221549-20211119174259917-169904719.png)
可以選擇打包的環境,然後點選package即可。
或者在專案的根目錄下用命令打包,不過需要使用-P指定環境,如下:
``` mvn clean package package -P test ```
maven中的profile的啟用條件還可以根據jdk、作業系統、檔案存在或者缺失來啟用。這些內容都是在<activation>標籤中配置,如下:
<!--通過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>
資源過濾
如果你不配置這一步,將會在任何環境下打包都會帶上全部的配置檔案,但是我們可以配置只保留對應環境下的配置檔案,這樣安全性更高。這一步配置很簡單,只需要在pom.xml檔案中指定
<!--根據啟用條件引入打包所需的配置和檔案-->
<resource>
<directory>src/main/resources</directory>
<!--引入所需環境的配置檔案-->
<filtering>true</filtering>
<includes>
<include>application.yml</include>
<!--根據maven選擇環境匯入配置檔案-->
<include>application-${profile.active}.yml</include>
</includes>
</resource>
上述配置主要分為兩個方面,第一是先排除所有配置檔案,第二是根據profile.active動態的引入配置檔案。
總結
至此,Maven的多環境打包已經配置完成,相對來說挺簡單,既可以在IDEA中選擇環境打包,也同樣支援命令-P指定環境打包。