SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工

目錄

  1. 前言
  2. 遺留問題一
  3. 修改父POM
  4. 激活Profile配置
  5. 獲取配置參數流程
  6. 遺留問題二
  7. 分離lib和resources
  8. 總結

前言

上一篇我們介紹了在分佈式項目中,如何新建單獨的配置子項目,來解決整個系統的配置問題,也順便介紹了一般多環境的處理方案

但我們遺留了2個問題,那今天老顧介紹一下怎麼解決遺留的問題。

遺留問題一

如何不要新建多個配置文件,如:application-dev.yml,application-prod.yml;這樣的方案很多的子項目都要新建這些文件,太麻煩了。我們來介紹一下下面的方案。

我們利用maven的Profiles來幫我們區分一下環境;我們分佈式項目中正好都會有一個parent pom父項目,起到統一依賴版本,以及公共的依賴包的作用,如下圖

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

修改父POM

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

上面有兩段profile,分別代表開發環境和生產環境,核心以id為準,properties標籤裡面包含不同環境的參數值。

激活 profile 配置

用戶可以在 mvn 命令行中添加參數“-P”,指定要激活的 profile 的 id。如果一次要激活多個 profile,可以用逗號分開一起激活。例如:

<code>mvn clean install -Pdev/<code>

如果希望某個 profile 默認一直處於激活狀態,可以在 profile 中配置 activation 元素,指定某個 profile 為默認激活狀態,樣例配置代碼如下:

<code>
	true
/<code>

那我們yml的配置文件中,如何引用到pom裡面配置profile的參數呢?那就是利用@@標記。

我們可以在rb-common-config子項目的配置文件中引用pom文件中profile參數值,如下

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

在maven進行構建時,會把@XXX@替換為相應的參數值。這樣就起到了通過maven構建達到區分不同的環境。

這種方案最大的好處就是,我們只需要建一個配置文件,不需要為每個環境新建一個配置文件了,看上去還比較清晰。

其他引用項目rb-user-server如何引用rb-common-config配置的參數呢?其實比較簡單就是${}方式,如圖

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

獲取配置參數流程

我們總結一下上面的整個獲取參數的流程

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

遺留問題二

還有一個問題就是安全性問題,我們不可能把生產環境的一些重要的參數暴露給開發人員,生產環境一般都是運維進行管理的,那如何配置生產環境呢?

一般我們配置的方式就是外部化配置,什麼意思呢?繼續往下看。

採用springboot項目,默認是把配置文件和lib依賴都打到了一個jar中,我們在運行的時候直接採用

<code>java -jar xxx.jar/<code>

這種方式簡化了jar包的啟動,但是也有不好的地方。

第一:jar包比較大,這是因為這個jar包含了第三方依賴的jar包,所以很大,給運維帶來一些麻煩,這個還不是太重要。

上面的問題還不是太重要,下面的問題就比較致命了

第二:配置文件也打進了jar包中,不方便我們進行查看配置,而且不能夠修改配置,這個也太難受了,要修改配置,需要重新打包。

那怎麼處理呢?

分離lib和resources

就是利用maven插件把springboot的jar裡面的lib和resources文件分離出來,裡面涉及到

maven-jar-plugin

spring-boot-maven-plugin

maven-dependency-plugin

maven-resources-plugin

各自插件的使用,這裡就不介紹了,直接上配置

spring-boot-maven-plugin 排除啟動jar包中依賴的jar包

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

maven-jar-plugin 自定義maven jar打包內容

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

maven-dependency-plugin 複製項目的依賴包到指定目錄

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

分離lib中,需要把config子項目中的配置文件解壓裡面,也一起放到當前項目的config中

maven-resources-plugin複製配置文件

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

通過上面的配置,我們就分離出了lib和resources文件,用maven構建

SpringBoot應用多個子項目配置文件規劃、多環境支持(二)

這樣我們達到了把config配置文件分離了出來。

我們把配置文件分離出來了就好辦了,在生產環境的時候,真實的配置文件在運維手上,運維會替換掉maven構建出來的config配置文件。

這樣就很好的保護了生產環境的參數值。

備註:如果配置文件包含其他的,就需要在啟動的時候 加上--spring.config.location;通過此屬性指定配置

# 外部配置文件絕對目錄,如果是目錄需要/結尾,也可以直接指定文件

# 如果指定的是目錄,spring則會讀取目錄中的所有配置文件

總結

介紹到這裡我們已經做到了配置文件外部化了,大型項目在配置規劃時,會引入配置中心這個概念(這個之前老顧已經介紹過了),不需要引入子項目config,直接連接配置中心即可。

還有在企業級應用中,還要結合持續化集成方案,自動打包、部署。

這些就不是這篇文章介紹的內容了,老顧下次在介紹。

---End---

最近老顧上傳了微服務網關的分享課程,請大家多多支持

推薦閱讀

a、dubbo如何處理業務異常,這個一定要知道哦!

b、企業級SpringBoot應用多個子項目配置文件規劃、多環境支持(一)

1基於RocketMq的SpringCloud Stream框架實戰入門

2、如何搭建消息中間件應用框架之SpringCloud Stream

3面試必備:網關異常了怎麼辦?如何做全局異常處理?

4Gateway網關係列(二):SpringCloud Gateway入門實戰,路由規則

5Gateway網關係列開篇:SpringCloud的官方網關Gateway介紹

6API網關在微服務架構中的應用,這一篇就夠了

7學習Lambda表達式看這篇就夠了,不會讓你失望的哦(續篇)

8Lambda用在哪裡?幾種場景?

9、為什麼會出現Lambda表達式,你知道嗎?

10、不說“分佈式事務”理論,直接上大廠阿里的解決方案,絕對實用

11、女程序員問到這個問題,讓我思考了半天,Mysql的“三高”架構

12、大廠二面:CAP原則為什麼只能滿足其中兩項?而不能同時滿足

13、阿里P7二面:聊聊零拷貝的原理

14、秒殺系統的核心點都在這裡,快來取

15、你瞭解如何利用token方式實現分佈式Session嗎?

16、Mysql索引結構演變,為什麼最終會是那個結構呢?讓你一看就懂

17、一場比賽涉及到的知識,用通俗易通的方式介紹併發協調

18、企業實戰Redis全方面思考,你思考了嗎?

19、面試題:Thread的start和run的區別

20、面試題:什麼是CAS?CAS的作用以及缺點

21、如何訪問redis中的海量數據?避免事故產生

22、如何解決Redis熱點問題?以及如何發現熱點?

23、如何設計API接口,實現統一格式返回?

24、你真的知道在生產環境下如何部署tomcat嗎?

25、分享一線互聯網大廠分佈式唯一ID設計 之 snowflake方案

26、分享大廠分佈式唯一ID設計方案,快來圍觀

27、你想了解一線大廠的分佈式唯一ID生成方案嗎?

28、你知道如何處理大數據量嗎?(數據拆分篇)

29、如何永不遷移數據和避免熱點? 根據服務器指標分配數據量(揭秘篇)

30、你知道怎麼分庫分表嗎?如何做到永不遷移數據和避免熱點嗎?

31、你瞭解大型網站的頁面靜態化嗎?

32、你知道如何更新緩存嗎?如何保證緩存和數據庫雙寫一致性?

33、你知道怎麼解決DB讀寫分離,導致數據不一致問題嗎?

34、DB讀寫分離情況下,如何解決緩存和數據庫不一致性問題?

35、你真的知道怎麼使用緩存嗎?

36、如何利用鎖,防止緩存擊穿?重構思想的重要性

37、海量訂單產生的業務高峰期,如何避免消息的重複消費?

38、你知道如何保障生產端100%消息投遞成功嗎?

39、微服務下的分佈式session該如何管理?

40、阿里二面:filter、interceptor、aspect應如何選擇?很多人中招

41、互聯網架構重要組員CDN,很多高級開發都沒有實操過,來看這裡

42、阿里二面:CDN緩存控制原理,看看能不能難住你

43、SpringCloud Alibaba之Nacos多環境多項目管理

44、SpringCloud Alibaba系列之Nacos配置中心玩法

45、SpringCloud Alibaba之Nacos註冊中心

46、SpringCloud Plus版本之SpringCloud Alibaba

47、SpringCloud Alibaba之Nacos集群、持久化

48、SpringCloud Alibaba之Nacos共享配置、灰度配置

49、SpringCloud Alibaba之Sentinel工作原理

50、SpringCloud Alibaba之Sentinel流控管理

51、SpringCloud Alibaba之Sentinel降級管理

52、SpringCloud Alibaba之Sentinel熱點參數限流

53、SpringCloud Alibaba之Sentinel的API實戰


分享到:


相關文章: