SpringBoot profile整合Maven profile實現多環境下配置、依賴自動切換

聲明本文主要以圖片的形式進行說明示例,項目代碼託管鏈接見文末。


相關知識(簡述)

SpringBoot profile:

       SpringBoot允許我們在配置文件(以application.properties示例)中通過配置spring.profiles.active=xxx,來對應激活application-xxx.properties配置,這就是SpringBoot profile。

注:spring.profiles.include也有類似的功能。

注:這裏不是重點,所以一句帶過。

Maven profile:

       Maven允許我們在配置文件(項目pom.xml文件或maven的settings.xml文件)中配置多個profile,並通過mvn指令或觸發器指定激活那個(或哪些)profile。

注:關於maven profile的相關知識可詳見https://blog.csdn.net/justry_deng/article/details/100537571


SpringBoot profile整合Maven profile實現多環境配置、依賴自動切換

聲明本文以test環境與prod環境的切換進行示例。

第一步:準備SpringBoot的profile(即:準備相關配置文件)。

說明一:本人在src/main/resources下創建了兩個文件夾,分別對應兩個環境;然後在prod文件夾下放置了生產環
              境需要的配置,在test文件夾下放置了測試環境需要的配置。

說明二:以上圖中的ftp.properties文件所示,因爲已經用文件夾來區分環境了,所以無論是生產環境還是測試環境,
              關於ftp配置的配置文件名可以相同。但是爲了語意更清晰,所以哪怕已經按照文件夾區分環境了,還是建
              議按照不同環境對應命名
。如,prod文件夾下的應取名ftp-prod.properties;test文件夾下的應取名
              ftp-test.properties。

 上圖中prod下的ftp.properties文件,內容是:

上圖中test下的ftp.properties文件,內容是:

第二步:根據自己的實際需求,在pom.xml中,準備Maven 的profile。

提示:本人只是爲了示例,所以這裏只是簡單的一個環境引入fastjson;一個環境引入lombok。

第三步:將Maven profile與SpringBoot profile關聯起來。

說明

  • 上圖中的1一個自定義的環境標識參數,該參數的值應該與第一步創建的用戶區分環境的文件夾名稱一致。
                        這個參數兩個地方用到:一是pom.xml中的resourses下被用到;而是在系統的配置文件
                        application.properties中被@key@動態取值(具體怎麼取的可見下一步)。

  • 上圖中的2將SpringBoot profile與Maven profile整合到一塊兒的關鍵部分。

  • 上圖中的2.1指定要打包加載的資源文件所在的根目錄。默認該目錄下的所有資源都會被打包。

  • 上圖中的2.2:filter過濾器,只有被過濾的資源文件裏面的佔位符,會被對應替換。如果沒有這個,那麼配置文
                            件通過@key@的方式將不能獲取到pom.xml裏key對應的值。

  • 上圖中的2.32.4因爲要動態打包對應環境的資源,即:從衆多資源目錄中只加載我們需要的資源目錄。方式
                                    有兩個:一是保留需要的環境目錄,然後排除不需要的環境目錄;二是先排除所有目錄(不
                                    管是不是我們需要的),然後再把我們需要的環境目錄加進來。這裏採用方式二。

第四步:在系統配置文件中application.properties中,動態獲取pom.xml裏的激活環
               境標識。

說明:在spring-boot-starter-parent的pom.xml中,springboot將配置文件裏動態獲取pom.xml文件參數值的佔位符,
           由${key}替換成了@key@
。目的是:避免和SpringBoot的佔位符${key}語意衝突。

第五步:測試一下。

prod測試

使用maven -clean -install -P prod-id指令,激活對應的maven profile並打包:

使用gd-gui打開生成的jar包,觀察:

test測試

使用maven -clean -install -P test-id指令,激活對應的maven profile並打包:

使用gd-gui打開生成的jar包,觀察:

由此可見,SpringBoot profile 整合 Maven profile成功


簡單拓展

       上面的過程依賴於從Maven profile方面主動切換環境;能否從SpringBoot profile主動切換環境呢?能的!筆者之前寫過一個Maven plugin來實現這個功能,不過有點瑕疵。下面介紹一種從“SpringBoot profile”方面實現切換環境切換(maven配置環境 + SpringBoot環境)的方法。

聲明下面的內容是基於上面的內容的進一步改造,所以這裏步驟接上一步的走。

第五步:在資源目錄下創建一個環境切換觸發文件。

注:位置、文件名均可隨意,只要與自己的配置(見下面的步驟)對應得上就行。如:本人已env.prod對應生
       產環境。以env.test對應測試換。

第六步:使用maven profile的activation標籤的file功能,設置環境觸發條件。

提示pom.xml同上,不過需要在maven profle的對應位置添加如下信息:

第七步:測試一下。

prod測試

將環境標識文件重命名爲對應生產環境爲env.prod:

注:對於某些IDE,對文件關聯處理得比較好,在修改文件名時,會對應修改其引用。但是我們這裏只需要修
       改文件名,不需要將我們在pom.xml裏的對應引用也改了。所以建議:先刪除該標識文件,然後再按照要
      激活的環境名,新建標識文件即可
(我們只需要用到該文件的文件名,該文件有沒有數據無所謂)。

注:程序運行的環境只可能是一個,所以環境標識文件也只能有一個,如果多了,那麼可能出現問題。

直接使用maven -clean -install打包即可:

使用gd-gui打開生成的jar包,觀察:

test測試

將環境標識文件重命名爲對應測試環境爲env.test:

注:對於某些IDE,對文件關聯處理得比較好,在修改文件名時,會對應修改其引用。但是我們這裏只需要修
       改文件名,不需要將我們在pom.xml裏的對應引用也改了。所以建議:先刪除該標識文件,然後再按照要
      激活的環境名,新建標識文件即可
(我們只需要用到該文件的文件名,該文件有沒有數據無所謂)。

注:程序運行的環境只可能是一個,所以環境標識文件也只能有一個,如果多了,那麼可能出現問題。

直接使用maven -clean -install打包即可:

使用gd-gui打開生成的jar包,觀察:

拓展成功!拓展完畢

 

^_^ 如有不當之處,歡迎指正

^_^ 參考鏈接
               https://maven.apache.org/pom.html#Version_Order_Specification
               https://blog.csdn.net/java_collect/artic...aven_126

^_^ 測試代碼託管鏈接
               
https://github.com/JustryDeng...Demo

^_^ 本文已經被收錄進《程序員成長筆記(二)》,筆者JustryDeng

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章