微服務(wù)SpringConfig配置中心詳解
前言
提示:這里可以添加本文要記錄的大概內(nèi)容:
例如:隨著人工智能的不斷發(fā)展,機(jī)器學(xué)習(xí)這門技術(shù)也越來越重要,很多人都開啟了學(xué)習(xí)機(jī)器學(xué)習(xí),本文就介紹了機(jī)器學(xué)習(xí)的基礎(chǔ)內(nèi)容。
一、SpringConfig概念介紹
在實(shí)際操作中會(huì)出現(xiàn)多個(gè)微服務(wù)操作同一個(gè)數(shù)據(jù)庫的情況,那么對于每個(gè)微服務(wù)都需要重復(fù)配置數(shù)據(jù)庫信息,而且當(dāng)數(shù)據(jù)庫信息改動(dòng)時(shí)也難以維護(hù)。因此一套集中的、動(dòng)態(tài)的配置管理設(shè)施是必不可少的。
SpringCloud Config為微服務(wù)架構(gòu)中的微服務(wù)提供集中化的外部配置支持,配置服務(wù)器為各個(gè)不同微服務(wù)應(yīng)用的所有環(huán)境提供了一個(gè)中心化的外部配置。SpringCloud Config 具體分為客戶端和服務(wù)端兩部分。
具體作用:
- 集中管理配置文件;
- 不同運(yùn)行環(huán)境不同的配置,動(dòng)態(tài)化地進(jìn)行配置更新,分環(huán)境部署(dev/test/prod/release)
- 運(yùn)行期間動(dòng)態(tài)調(diào)整配置,不需要在每個(gè)服務(wù)部署的機(jī)器上編寫配置文件,配置變動(dòng)各個(gè)微服務(wù)能夠自動(dòng)拉取信息
二、配置中心服務(wù)器端搭建
配置中心服務(wù)端
1、SpringCloud Server使用Git 作為遠(yuǎn)程的配置文件倉庫存儲(chǔ)地址,我們需要先在遠(yuǎn)程建立好倉庫
2、修改pom.xml、application.yml
<!-- SpringConfig Server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
server: port: 3344 spring: application: name: cloud-config-server cloud: config: server: git: #配置遠(yuǎn)程倉庫的地址 uri: https://gitee.com/loserii/my_-spring-cloud_config.git password: xjxhhxjava2048 username: loserii search-paths: xxxxx #git倉庫下相對搜索地址 label: master #配置遠(yuǎn)程分支名 eureka: instance: instance-id: configServer prefer-ip-address: true client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:7001/eureka
配置完成后啟動(dòng)服務(wù),本地通過HTTP請求訪問遠(yuǎn)程倉庫上的配置文件時(shí)遵循以下格式的請求資源:
/{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties
{label}
作為遠(yuǎn)程倉庫的分支;{application}-{profile}
作為遠(yuǎn)程倉庫上的配置文件名,比如config-test.yml
3、此外還可以配置多個(gè)存儲(chǔ)庫,配置相應(yīng)的匹配規(guī)則來讀取文件
spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo repos: simple: https://github.com/simple/config-repo special: pattern: special*/dev*,*special*/dev* uri: https://github.com/special/config-repo local: pattern: local* uri: file:/home/configsvc/config-repo
pattern表示模式匹配,是帶有通配符{application}/{profile}
名稱的逗號(hào)分隔列表。如果pattern不匹配任何模式,那么它就會(huì)使用spring.cloud.config.server.git.uri
下的默認(rèn)uri。
三、配置中心客戶端搭建
3.1 配置同步機(jī)制介紹
客戶端通過SpringCloud Config Server來獲取到遠(yuǎn)程的Config環(huán)境配置,但是如果想要自己定義一些額外的配置,就需要另外創(chuàng)建一個(gè)配置文件。
客戶端項(xiàng)目中包含兩種配置文件:application.yml
(用戶級(jí)的資源配置項(xiàng))、bootstrap.yml
(系統(tǒng)級(jí)的資源配置項(xiàng),優(yōu)先級(jí)更高)
SpringCloud 會(huì)創(chuàng)建一個(gè) Bootstrap Context
上下文,該上下文作為 Application Context
的父上下文。初始化的時(shí)候,Bootstrap Context
負(fù)責(zé)從外部源加載配置屬性并且解析配置。這兩個(gè)上下文共享一個(gè)從外部獲取的Environment
。
什么是Environment
?
Environment用于存儲(chǔ)服務(wù)器的配置數(shù)據(jù),管理此行為的是EnvironmentRepository。Environment是Spring Environment(包括PropertySources作為主要功能)的域的淺層副本。
Environment資源由三個(gè)變量參數(shù)化:
{application}
映射到客戶端的spring.application.name
;{profile}
映射到客戶端上的spring.profiles.active
;{label}
標(biāo)記版本這一組件;
3.2 詳細(xì)配置
客戶端從配置服務(wù)中心獲取配置。
- 修改 pom.xml、bootstrap.yml
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
spring: application: name: ConfigCenterClient cloud: config: fail-fast: false #客戶端連接失敗時(shí)開啟重試,需要結(jié)合spring-retry、spring-aop label: master #獲取配置文件的分支名 name: config #獲取的文件名 profile: test #文件后綴 uri: http://localhost:3344 #配置中心服務(wù)端地址 eureka: instance: instance-id: config-client prefer-ip-address: true client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:7001/eureka server: port: 3355
注意與eureka、cloud相關(guān)的配置需要放在bootstrap.yml
文件中,程序啟動(dòng)時(shí)會(huì)先讀取bootstrap.yml
然后再讀取application.yml
- 測試配置讀取
@RestController @RequestMapping("/test") public class TestController { @Value("${config.info}") private String info; @GetMapping("/testInfo") public String test(){ return info; } }
3.3 分布式下的問題
測試時(shí)發(fā)現(xiàn)當(dāng)在遠(yuǎn)程倉庫修改配置文件數(shù)據(jù)后,本地的SpringCloud Config Server
能夠在不重啟的情況下接收到新配置,但是本機(jī)的SpringCloud Config Client
就不能直接獲取,必須進(jìn)行重啟。這在微服務(wù)很多時(shí)是不方便處理的。
解決方法: 客戶端向外部暴露監(jiān)控的端點(diǎn),結(jié)合@RefreshScope
注解來解決
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
教新手使用java如何對一個(gè)大的文本文件內(nèi)容進(jìn)行去重
用HashSet對內(nèi)容去重這個(gè)過程jvm會(huì)內(nèi)存溢出,只能首先將這個(gè)大文件中的內(nèi)容讀取出來,對每行String的hashCode取模取正整數(shù),可用取模結(jié)果作為文件名,將相同模數(shù)的行寫入同一個(gè)文件,再單獨(dú)對每個(gè)小文件進(jìn)行去重,最后再合并2021-06-06Java AQS中CyclicBarrier回環(huán)柵欄的使用
這篇文章主要介紹了Java中的 CyclicBarrier詳解,CyclicBarrier沒有顯示繼承哪個(gè)父類或者實(shí)現(xiàn)哪個(gè)父接口, 所有AQS和重入鎖不是通過繼承實(shí)現(xiàn)的,而是通過組合實(shí)現(xiàn)的,下文相關(guān)內(nèi)容需要的小伙伴可以參考一下2023-02-02SpringBoot整合WebSocket的客戶端和服務(wù)端的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot整合WebSocket的客戶端和服務(wù)端的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07SpringCloud Gateway 利用 Mysql 實(shí)現(xiàn)動(dòng)態(tài)路由的方法
這篇文章主要介紹了SpringCloud Gateway 利用 Mysql 實(shí)現(xiàn)動(dòng)態(tài)路由的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02Java基礎(chǔ)知識(shí)精通注釋與數(shù)據(jù)類型及常量與變量
本文給大家介紹了Java的注釋與數(shù)據(jù)類型和常量變量,這些都是最基礎(chǔ)的知識(shí),文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04