1. 程式人生 > 其它 >Spring Boot 多環境配置

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@。

標籤指定了預設啟用的環境,則是打包的時候不指定-P選項預設選擇的環境。

以上配置完成後,將會在 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>標籤中配置,如下:
true
  <!--通過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檔案中指定過濾的條件即可,如下:

src/main/resources application*.properties
<!--根據啟用條件引入打包所需的配置和檔案-->
<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指定環境打包。