Springcloud Config配置中心使用與相關(guān)介紹
Springcloud Config
什么是springcloud Config
簡單來說,Spring Cloud Config就是我們通常意義上的配置中心,也就是微服務(wù)項目中,每一個微服務(wù)都需要配置相應(yīng)的配置,如果不同服務(wù)的配置文件有相同的配置,如果這些相同配置需要修改的話就要全都修改一遍。如果使用springcloud Config的話就可以把原本放在本地文件的配置抽取出來放在中心服務(wù)器,從而能夠提供更好的管理、發(fā)布能力。
Config分為服務(wù)端和客戶端,服務(wù)端也稱為分布式配置中心,它是一個獨立的微服務(wù)應(yīng)用,用來連接配置服務(wù)器并為客戶端提供獲取配置信息,加密/解密信息等訪接口。客戶端則是通過指定的配置中心來管理應(yīng)用資源,以及與業(yè)務(wù)相關(guān)的配置內(nèi)容,并在啟動的時候從配置中心獲取和加載配置信息配置服務(wù)器默認采用git來存儲配置信息,這樣就有助于對環(huán)境配置進行版本管理,并且可以通過git客戶端工具來方便的管理和訪問配置內(nèi)容
config服務(wù)端的配置使用
第一步: 外部config需要結(jié)合git使用,于是需要在github或者gitee創(chuàng)建一個倉庫,倉庫里全都是各種配置文件,git遠程倉庫的創(chuàng)建這里就不多加贅述,創(chuàng)建完成之后需要獲取到倉庫的鏈接

第二步: 引入相關(guān)依賴
<!--Config服務(wù)端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
第三步: 配置文件配置遠程倉庫地址
server:
port: 3344spring:
application:
name: cloud-config-center #注冊進Eureka服務(wù)器的微服務(wù)名
cloud:
config:
server:
git:
uri: https://gitee.com/mereign/springcloud-config.git #GitHub或者Gitee上面的git倉庫名字
search-paths: #搜索目錄
- springcloud-config
label: master #讀取分支
#啟動成功后訪問的路徑 http://ip:3344/{label}/{application}-{profile}.yml 能訪問的配置文件 就表示成功了eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
啟動配置中心微服務(wù)模塊,但是有些小伙伴會遇到這個異常Authentication is required but no CredentialsProvider has been registered,原因是你的遠程倉庫創(chuàng)建的私有的未開源,解決方案有兩種,一來就是把倉庫修改為開源倉庫,還有就是使用下面的方法配置你github或者Gitee的用戶名和密碼
spring:
application:
name: cloud-config-center #注冊進Eureka服務(wù)器的微服務(wù)名
cloud:
config:
server:
git:
uri: https://gitee.com/mereign/springcloud-config.git #GitHub或者Gitee上面的git倉庫名字
username: 自己的github或者Gitee用戶名
password: 自己的github或者Gitee密碼
第四步: 主程序類使用@EnableConfigServer注解標注Config服務(wù)端
配置好了之后啟動微服務(wù),可以使用url鏈接直接讀取文件里的內(nèi)容

config客戶端的相關(guān)問題
config客戶端的配置使用
第一步: 引入相關(guān)依賴,這里客戶端的依賴與服務(wù)端有所不同
<!--Config服務(wù)端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
第二步: 配置文件,這里的客戶端的配置文件與之前的有所不同,命名為bootstrap.yml,主要區(qū)別為applicaiton.yml是用戶級的資源配置項,而bootstrap.yml是系統(tǒng)級的,優(yōu)先級更加高
server:
port: 3355spring:
application:
name: config-client
cloud:
config:
uri: http://localhost:3344 #配置中心的地址
label: master #分支名稱
name: config #配置文件名稱
profile: dev #讀取后綴名稱 上述三個綜合http://localhost:3344/master/config-dev.yml#服務(wù)注冊到eureka地址
eureka:
client:
service-url:
#設(shè)置與eureka server交互的地址查詢服務(wù)和注冊服務(wù)都需要依賴這個地址
defaultZone: http://localhost:7001/eureka #單機版
經(jīng)過上述配置,等服務(wù)啟動開的時候,會3355服務(wù)端會到3344服務(wù)端獲取config-dev的配置內(nèi)容,3344服務(wù)端再來連接配置的GitHub或者Gitee倉庫從而獲取config-dev的配置內(nèi)容
第三步: 主程序類只需要標注eureka客戶端即可,無需標注config客戶端
第四步: 服務(wù)端的url鏈接形式獲取內(nèi)容,而客戶端需要使用REST接口的形式獲取指定配置信息
@RestController
public class ConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return configInfo;
}
}
啟動主程序類(要先啟動注冊中心eureka再啟動config服務(wù)端,最后才能啟動config客戶端),然后訪問controller中的接口即可獲得相應(yīng)的配置信息

動態(tài)刷新問題
當(dāng)遠程倉庫的配置修改之后,服務(wù)端通過url鏈接的形式獲取內(nèi)容是更新之后的,但是客戶端使用REST接口的形式獲取到的配置信息則是更新之前的,只有重啟config服務(wù)端微服務(wù)才能通過客戶端接口訪問到更新之后的配置信息。
為了解決上述的問題,可以使用動態(tài)刷新配置服務(wù)端微服務(wù),避免每次配置更新都需要重啟微服務(wù)才能獲取最新配置的痛點
第一步: 引入actuator監(jiān)控技術(shù)依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
第二步: bootstrap.yml文件中暴露服務(wù)端點,可以讓這個服務(wù)處于可被監(jiān)控狀態(tài)
# 暴露監(jiān)控端點
management:
endpoints:
web:
exposure:
include: "*"
第三步: 在controller類上加@RefreshScope注解
第四步: 發(fā)送post請求,手動刷新3355服務(wù)端的監(jiān)控,這樣才能刷新config服務(wù)端獲取的配置信息
curl -X POST "http://localhost:3355/actuator/refresh
第五步: 到此為止就config服務(wù)端就可以訪問到遠程倉庫中最新的配置信息了
config客戶端的遺留問題
config客戶端動態(tài)刷新解決了微服務(wù)每次都要重啟才能獲取最新配置信息的問題,但是,如果config客戶端有很多呢?每次遠程倉庫配置修改都需要使用post請求手動刷新所有的服務(wù)嗎?是不是也很麻煩,那么是否可以使用廣播的形式,一次通知處處生效,大范圍的自動刷新,定制化的指定服務(wù)刷新?那就用到了下一篇博客學(xué)習(xí)的消息總線——springcloud Bus
到此這篇關(guān)于Springcloud Config配置中心使用與相關(guān)介紹的文章就介紹到這了,更多相關(guān)Springcloud Config配置中心內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java報錯之springboot3+vue2項目web服務(wù)層報錯總結(jié)
java入門學(xué)習(xí),隨手記錄一下開發(fā)過程中產(chǎn)生的報錯,有些錯誤是網(wǎng)上搜索再加上自己嘗試,隨手引用了一些其他人的記錄,也是留給自己看的,或是希望能對其他初學(xué)者有幫助2023-06-06
關(guān)于BeanUtils.copyProperties(source, target)的使用
這篇文章主要介紹了關(guān)于BeanUtils.copyProperties(source, target)的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06
Java?SpringBoot項目如何優(yōu)雅的實現(xiàn)操作日志記錄
這篇文章主要介紹了Java?SpringBoot項目如何優(yōu)雅的實現(xiàn)操作日志記錄,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08
分析JVM源碼之Thread.interrupt系統(tǒng)級別線程打斷
在java編程中,我們經(jīng)常會調(diào)用Thread.sleep()方法使得線程停止運行一段時間,而Thread類中也提供了interrupt方法供我們?nèi)ブ鲃哟驍嘁粋€線程。那么線程掛起和打斷的本質(zhì)究竟是什么,本文就此問題作一個探究2021-06-06
簡單談?wù)刯ava中final,finally,finalize的區(qū)別
Java中final、finally、finalize的區(qū)別與用法,困擾了不少學(xué)習(xí)者,下面我們就這個問題進行一些探討,希望對大家的學(xué)習(xí)有所幫助。2016-05-05
Netty的Handler鏈調(diào)用機制及如何組織詳解
這篇文章主要為大家介紹了Netty的Handler鏈調(diào)用機制及如何組織示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03

