天天看點

Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇

3. 多環境選擇

3.1 什麼是多環境選擇

以下兩種場景下需要進行“多環境選擇”。

(1) 相同代碼運作在不同環境

在開發應用時,通常同一套程式會被運作在多個不同的環境,例如,開發、測試、生産環境等。每個環境的資料庫位址、伺服器端口号等配置都會不同。若在不同環境下運作時将配置檔案修改為不同内容,那麼,這種做法不僅非常繁瑣,而且很容易發生錯誤。

此時就需要定義出不同的配置資訊,在不同的環境中自動選擇不同的配置。

(2) 不同環境執行不同實作類

在開發應用時,有時不同的環境,需要運作的接口的實作類也是不同的。例如,若要開發一個具有短信發送功能的應用,開發環境中要執行的 send()方法僅需調用短信模拟器即可,而生産環境中要執行的 send()則需要調用短信營運商所提供的短信發送接口。

此時就需要開發兩個相關接口的實作類去實作 send()方法,然後在不同的環境中自動選擇不同的實作類去執行。

3.2 需求

下面将實作如下功能:存在開發與生産兩種環境,不同環境使用不同配置檔案,不同環境調用不同接口實作類。

3.3 多配置檔案實作方式

(1) 定義工程

複制Spring Boot 快速入門中的工程,并重命名為 03-multiEnv。

(2) 定義配置檔案

  • A、定義多個配置檔案

    在 src/main/resources 中再定義兩個配置檔案,分别對應開發環境與生産環境。

    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
  • B、 說明

    在 Spring Boot 中多環境配置檔案名需要滿足

    application-{profile}.properties

    的格式,其中{profile}為對應的環境辨別,例如,
    • application-dev.properties:開發環境
    • application-test.properties:測試環境
    • application-prod.properties:生産環境

    至于哪個配置檔案會被加載,則需要在 application.properties 檔案中通過spring.profiles.active 屬性來設定,其值對應{profile}值。例如,spring.profiles.active=test 就會加載 application-test.properties 配置檔案内容。

    在生産環境下,application.properties 中一般配置通用内容,并設定 spring.profiles.active 屬性的值為 dev,即,直接指定要使用的配置檔案為開發時的配置檔案,而對于其它環境的選擇,一般是通過指令行方式去激活。配置檔案 application-{profile}.properties 中則配置各個環境的不同内容。

(3) 定義業務代碼

Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
  • A、定義業務接口
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
  • B、 定義兩個實作類
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
  • C、 說明

    在實作類上添加@Profile 注解,并在注解參數中指定前述配置檔案中的{profile}值,用于指定該實作類所适用的環境。

(4) 定義處理器

Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇

(5) Idea 下運作與通路

  • A、運作

    打開主類在 Idea 中直接運作,即可在控制台看到預設使用的是開發環境,即端口号使用的是 8888,而工程的根路徑為/ddd。

    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
  • B、 通路
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
    從頁面顯示内容可知,其執行的業務接口實作類為 DevelopServiceImpl,即開發階段應使用的實作類。
  • C、 修改配置檔案
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
  • D、再運作

    将上次運作停掉後再次運作主類,即可在控制台看到使用的是生産環境,即端口号使用的是 9999,而工程的根路徑為/ppp。

    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
  • E、 再通路
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
    從頁面顯示内容可知,此次執行的業務接口實作類為 ProduceServiceImpl,即生産環境下應使用的實作類。

(6) 在指令行下選擇環境

将工程打為 Jar 包後,在指令行運作。若要想切換運作環境,必須要修改主配置檔案嗎?答案是否定的。隻需添加一個指令參數即可動态指定。

  • A、在指令行下運作 Jar 包

    例如,現在的主配置檔案中指定的是 dev 環境。

    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
    将目前工程打為 Jar 包後,在指令行運作時添加如下參數。
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
    此時執行的就是生産環境,調用的就是 ProduceServiceImpl 類。
    Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇
  • B、 說明

    在指令行中添加的參數可以是寫在配置檔案中的任意屬性。其原理是指令行設定的屬性值的優選級高于配置檔案的。

3.4 單配置檔案實作方式

這種實作方式隻能使用 application.yml 檔案,使用 application.properties 檔案好像檔案本身就會出錯。

(1) 定義工程

複制前面的 3-multiEnv 工程,并重命名為 03-multiEnv2。

(2) 修改配置檔案

将原有的配置檔案全部删除,然後定義 application.yml 檔案。需要注意的是,這三部分之間是由三個減号(-)分隔的,必須是三個。而這三部分充當着之前的三個配置檔案。

Spring Boot工程應用篇(二)多環境選擇(相同代碼運作在不同環境、不同環境執行不同實作類、單配置檔案實作多環境)3. 多環境選擇

(3) 運作與通路

運作與通路方式與前面的多配置檔案的完全相同。

繼續閱讀