一、心路歷程
終於告一段落了,從開始搭建配置中心到現在,經歷了心理和現實的一系列過程。
入職這家公司后,有個公司架構師給了一個基礎的框架,說是用springcloud,里面切切實實是一個架子,springcloud的多個組件都沒有引入(在這里提一下,這個架構是我們投資人的其他公司的技術,不屬於我們公司,只是順便帶一下我們)。
看我之前的文章大家知道,業務開發中基本的springcloud zuul和feign組件是我一步一步搭建起來的。雖說對於大部分人來說很簡單,但對於我來說,由於之前公司使用的是springboot,所以從接觸springcloud至今還沒到一年的時間。搭建起來既屬於了解也屬於摸索的過程。
大家知道springcloud是個全家桶模式,里面是由多個組件構成的。zuul和feign是開發業務必須的,所以早早的搭建了。其他的還在逐步完善中。因為最近在聯調接口,有點時間,想起來config還沒搭建,就起了念頭。
前段時間搜過很多關於config的文章,都沒看下去,后來就上手根據網上的步驟一步一步操作,但是有的步驟操作着操作着就斷了,接下來的步驟也不一樣,慢慢的搭建配置中心的事情擱置了。
最近領導讓我們小組長出一份近月的工作安排,我覺得是時候將配置中心實實在在的安排進去了。接下來我耐心開始搜集相關資料,沒想到當天的配置中心就進行了大概40%的樣子(原諒我需要一些時間進行摸索,哈哈哈)。
到今天,大概步驟是走完了,雛形出現了。不由得感慨一下子。
有的事情需要堅持、需要耐心。記得幾年前?我忘記了,當時和我老公去海南玩,每個女生都想要美美噠,但當時畫眼線是我化妝道路上的一道坎,平時上班懶,加上每次畫眼線就開始流眼淚,導致我一直沒有學會。那次出門旅游,我又帶了眼線筆,以為眼線筆又是陪伴我旅游的伙伴。記得第二天早晨出門之前,我開始洗漱化妝,試着拿出眼線筆,還是流淚,還是不行,但是我心里有個信念,我一定要學會,忍住眼淚,按照網上的步驟,眼線慢慢成形了。雖然我現在上班也不畫眼線,但是我會,這很重要,至少哪天心血來潮,我可以美美的出gai。后來戴美瞳也是相同經歷。其實這就是不放棄和相信的力量。我身上有太多相信的力量,以后有機會可以慢慢講給你們。有點跑偏了。。。。。
二、懶惰的可怕
繼續聊偏。。。從某個時刻起,我對生活變得太過知足。舉栗子,假如是經歷了一些常人沒經歷的事情。其實我覺得這種經歷挺害人的,害我從對生活的積極追求,變成對生活的消磨。不是不再熱愛生活,只是沒有沖勁。其實我和我老公對比就能看的出來,因為我倆都是做技術的,而我現在還是個搬運工,他已經稱為工程師了,嗚嗚。。。。好了,話不多說了,開始我們的配置中心步驟及我踩過的坑,有興趣的可以關注我,等以后有機會繼續聊。
三、進入正題——開始配置中心config(遇到的坑在步驟中列出,如果你在配置中有問題,參照我的步驟看能不能出坑)
來一波官方介紹:配置管理。springcloud提供服務端和客戶端。服務端存儲后端的默認實現使用git(github或者碼雲)。
白話:為了在不同的環境、不同的分支(lable沒配置,我們項目不需要區分分支配置)獲取不同的配置信息。
步驟開始:
1.springcloud config服務端:
新建一個service-config服務,
三個文件:啟動類的文件configApplication/依賴型文件pom.xml/配置類文件application.yml
1.configApplication.java:加注解@EnableConfigServer
2.pom.xml中引入spring-cloud-config-server
3.application.yml
坑一:
用戶名密碼方式和公私鑰方式都可以。
如果uri是https形式,那么使用用戶名和密碼方式即可
如果uri是ssh形式,則使用公私鑰形式。
重點說下公私鑰形式的坑:
首先要加上這兩行:
其次:生成公私鑰,私鑰放到項目里,公鑰放到碼雲的對應項目的公鑰配置里(配置中心文件結構,等下有圖)
此時:服務端ok了,如果啟動完注冊中心和配置中心,出現以下問題:
.git.privateKey' is not a valid private key
可能的原因一:碼雲不接受以-----BEGIN OPENSSH PRIVATE KEY開頭的私鑰形式,你需要生成以
----BEGIN RSA PRIVATE KEY開頭的形式。如上圖。生成命令
ssh-keygen -m PEM -t rsa -b 4096 -C "****"
可能原因二:這是我搜索出來的,private-key空格后加一個真實的 | 才行
接下來上圖碼雲上的配置文件的結構:4個圖,提示的是每次點進去的內容。注意config上的配置文件是以應用名-dev/-test/-prod.properties結尾的,就是不同環境拉不同配置
好,此時,服務端已經ok了。你可要通過請求試一下
2.客戶端(業務端模塊)處理:
修改三個文件,依賴型文件pom.xml、配置型文件application.yml、業務使用controller
pom.xml引入spring-cloud-starter-config
application.yml
controller:
坑二:
啟動完注冊中心、配置中心、在啟動客戶端時,如報錯:
Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'common_service_config' in value "${common_service_config}"
原因是:客戶端的應用名和配置文件的應用名沒有一致
本客戶端的應用名為:bi-service。在配置文件里應該叫bi-service-dev.properties。如果前面不一致的話,是找不到配置文件的
坑三:刷新生效的四步
栗子:如果你修改了bi-service-dev.properties里的common_service_config=devdev,把devdev改成devdev111。如果你啟動客戶端bi-service服務,是可以讀取到新的devdev111.但是啟動客戶端成本較大,我們需要實現熱更新。
解決方法:(上面貼的代碼里已包含)
1.客戶端pom.xml中引入了spring-boot-starter-actuator。2.在controller的類上加了注解@RefreshScope。加這個的目的是為了在修改配置后不啟動客戶端。但此時,修改后,客戶端並沒有拉取到新的值。3.需要在客戶端applicaiton.yml加上
此時,在所有服務運行過程中,如果你修改了bi-service-dev.properties,改成devdev111。
4.你需要在postman或者黑屏里執行
完美。此時我最近配置的config步驟和三個坑都說完了。
以上是我總結的springcloud config,以后新增組件和其他內容,還會跟大家分享,大家有什么疑問和我不對的地方,歡迎咨詢和指正








