選單

SpringBoot中如何實現多環境配置?

大家好,我是張大鵬。今天給大家分享的是在SpringBoot中如何實現多環境的配置。

在真實的開發中,多環境的配置需求是極高的。比如說在最開始開發專案的時候,需要有一套針對開發環境的配置;在專案基本開發完畢,在準備上線之前,還需要進行測試,這個時候需要一套測試環境的配置;在測試完畢以後才是真正的上限,這個時候又需要一套生產環境的配置。

那麼,如何實現這種多環境的配置呢?

這裡,僅介紹一下個人的一些經驗和心得。在Python開發中,如果你使用Django進行開發的話,會有一個DEBUG變數,如果這個變數為true,則是開發環境和測試環境,如果是false則是生產環境;在Golang的開發中,可以透過配置環境變數來區分生產環境和測試環境;在Java的開發中,比如今天咱們要講的SpringBoot的開發,其實也是類似的思想,透過一個識別符號來實現不同環境的區分。

比如像下面這樣:

這段配置告訴SpringBoot,將會使用application_dev。yml作為程式執行時的配置。這裡我用的是dev,表示開發環境,在後面測試,可以改為test,然後在application_test。yml填充測試環境的配置;在專案部署上線的時候,可以改為server,然後在application_server。yml中填充生產環境的相關配置。

關於多環境配置的實現思路大概就是這樣的。

除了實現多環境配置,今天這篇文章還需要給大家介紹一下如何讀取配置環境中的配置資訊,以及如何使用SpringBoot2。7中的單元測試。這兩個知識點比較零碎,所以整合在這篇文章中一併分享給大家。

還是遵循一貫的風格,咱們從0到1的搭建一個完整的專案,保證讓大家都能夠將程式碼寫出來,學會今天的知識點。

第一步:建立專案。咱們使用IDEA建立專案。在昨天給大家分享的文章中,其中有一段文字描述的是IDEA升級以後,所有的選單自動變成了中文。經過作者的一番研究發現,這個功能是因為IDEA升級以後,自動安裝了一箇中文包的外掛,所以實現了漢化的效果。如果要遮蔽掉,直接禁用這個外掛就行了。

由於作者用了很多年的英文介面的IDEA,更習慣英文介面,所以換了回來。所以下面的截圖和昨天文章的截圖稍有不同。

SpringBoot中如何實現多環境配置?

透過IDEA建立SpringBoot專案,我們需要配置名稱,分組,包名等。這裡需要注意的是JDK的版本,作者依然使用的是JDK8,這是非常穩定的一個版本,後面SpringBoot3推薦的是JDK17,等穩定以後,可以再給大家整理相關的用法,發一篇文章。

填寫好專案的相關配置以後,我們再選擇相關的依賴,如下圖:

SpringBoot中如何實現多環境配置?

這裡SpringBoot的版本是2。7。0,依賴選擇了SpringBootDevTools,Lombok,SpringWeb,Thymeleaf。昨天《SpringBoot如何定製banner》的文章中,給大家介紹了SpringWeb的用法,今天這篇文章會給大家覆蓋到Lombok的用法。

在依賴選擇完畢以後,我們點選Finish完成專案的建立。初始的專案結構如下圖:

SpringBoot中如何實現多環境配置?

我們先把banner。txt創建出來,實現banner的定製:

SpringBoot中如何實現多環境配置?

接著,我們先感受一下,如何透過Java程式碼讀取application。yml中的配置資訊。

第二步:讀取yaml配置檔案中的資訊。先將application。properties修改為application。yml,然後在裡面填上自定義的配置資訊,如下:

有了配置檔案和配置資訊以後,我們編寫測試程式碼,獲取配置檔案中的內容。這一步主要教大家如何實現透過Java程式碼讀取配置檔案中的內容,以及SpringBoot2。7中的單元測試如何使用。因為這個比較基礎,但是又不得不掌握,所以在這篇文章中統一給大家說明,後面的其他文章,如果遇到單元測試,可能不會再詳述。

SpringBoot2。7中的單元測試的使用非常的簡單,我們只需要在test目錄中建立測試檔案即可。比如我們建立ApplicationConfigTests:

SpringBoot中如何實現多環境配置?

然後,我們用註解@SpringBootTest來將當前類宣告為測試類,使用@Test註解來將類的方法宣告為測試方法。這裡我們還要讀取application。yml中的配置資訊,使用@Value(‘$’)註解可以做到。

修改ApplicationConfigTests。java,填充如下程式碼:

第三步:使用maven編譯程式。在IDEA右側的maven選項卡中,我們先clean,然後install。

SpringBoot中如何實現多環境配置?

第四步:測試。我們只需要點測試方法左側的綠色按鈕即可。

輸出結果如下:

透過以上步驟,我們就實現了一個新增配置,讀取配置,測試執行的完整流程的案例。

那麼,如果配置資訊是一個物件怎麼辦呢?

相信實現的思路有很多種,這裡作者推薦一種比較好用的方法,那就是配置物件。我們透過一個實際的案例來演示一下。

首先,我們在application。yml中新增配置,儲存的是資料庫的基本資訊:

然後,我們新增一個配置物件。新建com。zhangdapeng520。MysqlInfo。java,填寫如下程式碼:

這裡的@Component註解將當前物件注入到Spring容器中;這裡的@ConfigurationProperties註解用於宣告,取application。yml中的mysql的片段的相關資料,作為這個類的相關屬性的值;這裡的@Data是lombok的一個註解,用於自動生成getter和setter的方法,簡化程式碼開發。

有了這個MysqlInfo物件以後,我們就能夠拿到application。yml中的mysql片段的相關配置資訊了。我們寫一段程式碼測試一下。

修改ApplicationConfigTests。java,修改為如下內容:

這裡透過@Autowired自動注入mysql的相關配置,然後寫了個測試方法測試讀取到的MySQL配置資訊,輸出結果如下:

透過觀察輸出結果可以發現,我們完整的拿到了application。yml中mysql的相關配置資訊。

此時的專案結構如下圖:

SpringBoot中如何實現多環境配置?

最後,我們再介紹一下SpringBoot中,如何實現多環境的配置,這也是咱們今天最重要的內容,鋪墊了前面的那麼多,也是為了實現這部分的內容。

我們將application。yml複製,貼上為application-dev。yml和application-server。yml。假設測試環境的MySQL資料庫和生產環境的MySQL資料庫是不一樣的。我們修改application-server。yml,將資料庫資訊修改,修改之後如下:

然後我們修改application。yml,告訴SpringBoot使用生產環境的配置。修改之後如下:

然後重新測試。此時我們整個案例都完成的差不多了,我們可以選擇測試偶有的方法,確保所有的功能都正常。

直接點選測試類左側的按鈕,可以實現測試測試類中所有的測試方法:

SpringBoot中如何實現多環境配置?

觀察輸出,我們發現banner是正確的:

SpringBoot中如何實現多環境配置?

繼續檢視控制檯輸出,我們發現輸出的結果也是我們期望的:

好了,這篇文章就分享到這裡了。

謝謝大家!

如果您需要這個案例的完整原始碼的話,可以評論轉發加關注,然後打賞個三五塊錢,私信或者留言獲取。

您的支援是作者持續更新的動力。

再次感謝!!!