微服務(wù)SpringConfig配置中心詳解
前言
提示:這里可以添加本文要記錄的大概內(nèi)容:
例如:隨著人工智能的不斷發(fā)展,機(jī)器學(xué)習(xí)這門技術(shù)也越來越重要,很多人都開啟了學(xué)習(xí)機(jī)器學(xué)習(xí),本文就介紹了機(jī)器學(xué)習(xí)的基礎(chǔ)內(nèi)容。
一、SpringConfig概念介紹
在實(shí)際操作中會出現(xiàn)多個微服務(wù)操作同一個數(shù)據(jù)庫的情況,那么對于每個微服務(wù)都需要重復(fù)配置數(shù)據(jù)庫信息,而且當(dāng)數(shù)據(jù)庫信息改動時也難以維護(hù)。因此一套集中的、動態(tài)的配置管理設(shè)施是必不可少的。
SpringCloud Config為微服務(wù)架構(gòu)中的微服務(wù)提供集中化的外部配置支持,配置服務(wù)器為各個不同微服務(wù)應(yīng)用的所有環(huán)境提供了一個中心化的外部配置。SpringCloud Config 具體分為客戶端和服務(wù)端兩部分。
具體作用:
- 集中管理配置文件;
- 不同運(yùn)行環(huán)境不同的配置,動態(tài)化地進(jìn)行配置更新,分環(huán)境部署(dev/test/prod/release)
- 運(yùn)行期間動態(tài)調(diào)整配置,不需要在每個服務(wù)部署的機(jī)器上編寫配置文件,配置變動各個微服務(wù)能夠自動拉取信息
二、配置中心服務(wù)器端搭建
配置中心服務(wù)端
1、SpringCloud Server使用Git 作為遠(yuǎn)程的配置文件倉庫存儲地址,我們需要先在遠(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配置完成后啟動服務(wù),本地通過HTTP請求訪問遠(yuǎn)程倉庫上的配置文件時遵循以下格式的請求資源:
/{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、此外還可以配置多個存儲庫,配置相應(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-repopattern表示模式匹配,是帶有通配符{application}/{profile}名稱的逗號分隔列表。如果pattern不匹配任何模式,那么它就會使用spring.cloud.config.server.git.uri下的默認(rèn)uri。
三、配置中心客戶端搭建
3.1 配置同步機(jī)制介紹
客戶端通過SpringCloud Config Server來獲取到遠(yuǎn)程的Config環(huán)境配置,但是如果想要自己定義一些額外的配置,就需要另外創(chuàng)建一個配置文件。
客戶端項(xiàng)目中包含兩種配置文件:application.yml(用戶級的資源配置項(xiàng))、bootstrap.yml(系統(tǒng)級的資源配置項(xiàng),優(yōu)先級更高)
SpringCloud 會創(chuàng)建一個 Bootstrap Context上下文,該上下文作為 Application Context的父上下文。初始化的時候,Bootstrap Context負(fù)責(zé)從外部源加載配置屬性并且解析配置。這兩個上下文共享一個從外部獲取的Environment。
什么是Environment?
Environment用于存儲服務(wù)器的配置數(shù)據(jù),管理此行為的是EnvironmentRepository。Environment是Spring Environment(包括PropertySources作為主要功能)的域的淺層副本。
Environment資源由三個變量參數(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 #客戶端連接失敗時開啟重試,需要結(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文件中,程序啟動時會先讀取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 分布式下的問題
測試時發(fā)現(xiàn)當(dāng)在遠(yuǎn)程倉庫修改配置文件數(shù)據(jù)后,本地的SpringCloud Config Server能夠在不重啟的情況下接收到新配置,但是本機(jī)的SpringCloud Config Client就不能直接獲取,必須進(jìn)行重啟。這在微服務(wù)很多時是不方便處理的。
解決方法: 客戶端向外部暴露監(jiān)控的端點(diǎn),結(jié)合@RefreshScope注解來解決
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot中配置好登錄攔截后,swagger訪問不了問題
這篇文章主要介紹了springboot中配置好登錄攔截后,swagger訪問不了問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
SpringBoot2.1 RESTful API項(xiàng)目腳手架(種子)項(xiàng)目
這篇文章主要介紹了SpringBoot2.1 RESTful API項(xiàng)目腳手架(種子)項(xiàng)目,用于搭建RESTful API工程的腳手架,只需三分鐘你就可以開始編寫業(yè)務(wù)代碼,不再煩惱于構(gòu)建項(xiàng)目與風(fēng)格統(tǒng)一,感興趣的小伙伴們可以參考一下2018-12-12
詳解Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀
這篇文章主要介紹了Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
Spring Boot Admin的使用詳解(Actuator監(jiān)控接口)
這篇文章主要介紹了Spring Boot Admin的使用詳解(Actuator監(jiān)控接口),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
Java Swing BoxLayout箱式布局的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java Swing BoxLayout箱式布局的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12

