嗯,挺全乎兒的,Spring Boot 多環境配置都在這裡了,你喜歡哪種?

愛撒謊的男孩發表於2020-11-13

持續原創輸出,點選上方藍字關注我

目錄

  • 前言
  • Spring Boot 自帶的多環境配置
    • 建立不同環境的配置檔案
    • 指定執行的環境
  • Maven 的多環境配置
    • 建立多環境配置檔案
    • 定義啟用的變數
    • pom 檔案中定義 profiles
    • 資源過濾
    • 總結
  • 總結

前言

日常開發中至少有三個環境,分別是開發環境(dev),測試環境(test),生產環境(prod)。

不同的環境的各種配置都不相同,比如資料庫,埠,IP地址等資訊。

那麼這麼多環境如何區分,如何打包呢?

本篇文章就來介紹一下Spring Boot 中多環境如何配置,如何打包。

Spring Boot 自帶的多環境配置

Spring Boot 對多環境整合已經有了很好的支援,能夠在打包,執行間自由切換環境。

那麼如何配置呢?下面將會逐步介紹。

建立不同環境的配置檔案

既然每個環境的配置都不相同,索性將不同環境的配置放在不同的配置檔案中,因此需要建立三個不同的配置檔案,分別是application-dev.propertiesapplication-test.propertiesapplication-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.propertiesapplication-test.propertiesapplication-prod.properties

加上預設的配置檔案application.properties同樣是四個配置檔案。

定義啟用的變數

需要將Maven啟用的環境作用於Spring Boot,實際還是利用了spring.profiles.active這個屬性,只是現在這個屬性的取值將是取值於Maven。配置如下:

spring.profiles.active=@profile.active@

profile.active實際上就是一個變數,在maven打包的時候指定的-P test傳入的就是值。

pom 檔案中定義 profiles

需要在mavenpom.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選項卡中出現以下內容:

1
1

可以選擇打包的環境,然後點選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 的兩種打包方式,每種方式有各自的優缺點,你更喜歡哪種呢?

原始碼已經上傳,回覆關鍵詞多環境配置獲取。

相關文章