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

第二步: 引入相關依賴
<!--Config服務端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
第三步: 配置文件配置遠程倉庫地址
server:
port: 3344spring:
application:
name: cloud-config-center #注冊進Eureka服務器的微服務名
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
啟動配置中心微服務模塊,但是有些小伙伴會遇到這個異常Authentication is required but no CredentialsProvider has been registered,原因是你的遠程倉庫創(chuàng)建的私有的未開源,解決方案有兩種,一來就是把倉庫修改為開源倉庫,還有就是使用下面的方法配置你github或者Gitee的用戶名和密碼
spring:
application:
name: cloud-config-center #注冊進Eureka服務器的微服務名
cloud:
config:
server:
git:
uri: https://gitee.com/mereign/springcloud-config.git #GitHub或者Gitee上面的git倉庫名字
username: 自己的github或者Gitee用戶名
password: 自己的github或者Gitee密碼
第四步: 主程序類使用@EnableConfigServer注解標注Config服務端
配置好了之后啟動微服務,可以使用url鏈接直接讀取文件里的內容

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

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

