SpringCloud之Config

SpringCloud之Config


推薦網站:https://www.springcloud.cc/spring-cloud-dalston.html#_spring_cloud_config


1. 什么是 Spring Cloud Config

Spring Cloud Config 是 Spring 官方提供的 分布式配置中心 組件,用來 集中管理、動態下發、版本控制 所有微服務的配置文件,支持 Git、文件系統、Vault(什么是Vault ?) 等多種后端存儲。


2. 核心作用

.

痛點沒有 Config 的情況有 Config 的解決方式
配置分散每個微服務自己維護 application.yml,修改要重啟所有服務集中存儲(Git),一處修改,全部生效
環境差異開發、測試、生產配置混雜,容易出錯多環境隔離application-dev.ymlapplication-prod.yml
敏感信息數據庫密碼明文寫在代碼里加密存儲(對稱/非對稱加密,集成 Vault)
動態刷新修改配置必須重啟服務@RefreshScope 實現 熱更新(無需重啟)
版本回滾配置改錯了無法回退Git 版本控制,一鍵回滾

3. 工作流程

工作流程(標準模式):

  • 開發者將配置文件上傳到 Git 倉庫(如 GitHub、GitLab)。
  • Config Server 啟動后連接 Git 倉庫,將配置緩存到本地。
  • 微服務(Config Client)啟動時,通過 HTTP 請求 Config Server 拉取配置。
  • 支持動態刷新:通過 POST /actuator/refresh 或 Spring Cloud Bus + MQ(如 RabbitMQ/Kafka)實現批量刷新

架構圖:

在這里插入圖片描述

┌────────────────────────────────────────────┐
│              Git 倉庫(遠程)                │
│   application.yml                          │
│   application-dev.yml                      │
│   application-prod.yml                     │
└─────────────┬──────────────────────────────┘│ 1. 拉取配置▼
┌────────────────────────────────────────────┐
│         Config Server(配置中心)            │
│  - 暴露 REST API                            │
│  - 支持 Git、本地文件、數據庫等存儲             │
│  - 支持加密/解密                             │
└─────────────┬──────────────────────────────┘│ 2. HTTP 拉取配置▼
┌────────────────────────────────────────────┐
│         Config Client(微服務)              │
│  - 啟動時從 Config Server 獲取配置            │
│  - 支持 @RefreshScope 熱刷新                 │
│  - 可注冊到 Eureka/Nacos 等服務發現           │
└────────────────────────────────────────────┘

4. 代碼示例(模擬3中的架構流程:client -> server -> gitee)

(1)先在遠程倉庫建立配置文件

這里使用gitee倉庫,一樣可以支持:

在這里插入圖片描述

遠程倉庫具體配置代碼,我們配置兩套信息,dev, test, 僅供參考:

spring:profiles: active: dev
---
server:port: 8201spring:profiles: devapplication:name: springcloud-config-deveureka:client:server-url:defaultZone: http://localhost:7001/eureka
---
server:port: 8202spring:profiles: testapplication:name: springcloud-config-testeureka:client:server-url:defaultZone: http://localhost:7001/eureka

(2) 創建config-server服務

使用config-server服務連接遠程倉庫:

  • 創建config-server服務模塊,導入pom依賴:
    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.5.RELEASE</version></dependency><!--config--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId><version>2.1.1.RELEASE</version></dependency>
  • 對應resources目錄下編寫yml文件:
server:port: 9001
spring:application:name: springcloud-config-server# 連接遠程倉庫cloud:config:server:git:# 注意是https的而不是sshuri: https://gitee.com/LiDaBao0829/test123.git# 通過 config-server可以連接到gitee,去訪問剛才的資源配置
  • 添加主啟動類
@SpringBootApplication
@EnableConfigServer
public class ConfigServer_9001 {public static void main(String[] args) {SpringApplication.run(ConfigServer_9001.class, args);}
}

(3)創建config-client服務

使用config-client服務去連接調用config-server服務,獲取遠程倉庫配置信息

  • 創建config-client模塊,導入pom依賴:
    <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId><version>2.1.1.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.3.5.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.5.RELEASE</version></dependency></dependencies>
  • 對應resources下創建 application.yml 和 bootstrap.yml 配置文件:

注:優先級:遠程配置 > 本地 bootstrap.yml > application.yml

bootstrap.yml :

# 系統級別的配置
spring:cloud:config:name: config-client # 對應gitee上需要讀取的資源名稱,不要后綴profile: test #讀取哪個環境,這里選擇testlabel: master #遠程倉庫分支uri: http://localhost:9001 #讀取配置的路徑,這里選擇我們的config-server模塊地址

application.yml:

# 用戶級別的配置
spring:application:name: springcloud-config-client
  • 創建一個controller類,用于測試我們獲取到的配置信息:

@RestController
public class ConfigClientController {//獲取微服務名稱@Value("${spring.application.name}")private String applicationName;//獲取Eureka服務@Value("${eureka.client.server-url.defaultZone}")private String eurekaServer;//獲取服務端的端口號@Value("${server.port}")private String port;@RequestMapping("/config")public String getConfig(){return "applicationName: " + applicationName + "\n"+ " eurekaServer: " + eurekaServer + "\n"+ " port:" + port;}
  • 創建主啟動類:
@SpringBootApplication
public class ConfigClient {public static void main(String[] args) {SpringApplication.run(ConfigClient.class, args);}
}

(4)調用測試

先啟動 config-server 服務,再啟動 config-client 服務,訪問 config-client 服務的 getConfig 接口,測試是否可以獲取到遠程配置信息,我們在 config-client服務 中的 bootstrap.yml 配置的是獲取 test 環境,期望結果是獲取到對應遠程倉庫的test配置信息。

測試結果:

在這里插入圖片描述
成功!


5. 總結

Spring Cloud Config = 遠程倉庫 + Config Server(服務端)+ Config Client(客戶端),實現集中管理、版本控制、動態刷新的微服務配置中心。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91583.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91583.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

探索VB.NET中的貝塞爾Bezier曲線繪制技巧

簡介&#xff1a;Bezier曲線是計算機圖形學中用于創建平滑曲線的重要工具&#xff0c;廣泛應用于圖形設計、游戲開發、CAD系統等領域。本文深入探討了Bezier曲線的基礎知識&#xff0c;并詳細說明了如何在Visual Basic中使用 Graphics 對象的 DrawBezier 方法繪制曲線。通過理論…

分布式分片策略中,分片數量的評估與選擇

分布式分片策略中,分片數量的評估與選擇是影響系統性能、擴展性和運維成本的核心問題 一、分片數量評估方法論 1. ??數據量基準模型?? ??單分片容量建議??:根據Elasticsearch最佳實踐,單個分片建議控制在10-50GB(冷數據可放寬至100GB),超過100GB會導致段合并效率…

Vue3高級特性:深入理解effectScope及其應用場景

系列文章目錄 Vue3 組合式 API 進階&#xff1a;深入解析 customRef 的設計哲學與實戰技巧 Vue3 watchEffect 進階使用指南&#xff1a;這些特性你可能不知道 Vue3高級特性&#xff1a;深入理解effectScope及其應用場景 文章目錄系列文章目錄前言一、核心概念1、什么是 effect…

Docker 中的動態配置:docker update 命令與環境變量管理

Docker 中的動態配置&#xff1a;docker update 命令與環境變量管理 在 Docker 容器的日常管理中&#xff0c;動態調整配置以適應業務需求變化是常見的操作。docker update 命令作為 Docker 平臺的重要工具&#xff0c;為運行中的容器提供了便捷的配置調整方式&#xff0c;而環…

ELK 使用教程采集系統日志

作者&#xff1a;小凱 沉淀、分享、成長&#xff0c;讓自己和他人都能有所收獲&#xff01; 本文的宗旨在于通過易于上手實操的方式&#xff0c;教會讀者完成系統ELK日志采集的對接和使用。那你知道對于一個系統的上線考察&#xff0c;必備的幾樣東西是什么嗎&#xff1f;其實這…

小程序部分pai

wx.setClipboardData 這是微信小程序提供的 API&#xff0c;用于將數據復制到剪貼板。 Page({data: {clientInfo: {email: exampleexample.com // 假設的郵箱數據}},// 復制郵箱到剪貼板copyEmail: function() {wx.setClipboardData({data: this.data.clientInfo.email,success…

【解決方案】鴻蒙 / 礦鴻系統 Shell 無故退出問題(息屏導致)詳解

平臺環境 OpenHarmony 版本&#xff1a;4.1 release開發板&#xff1a;DAYU / RK3568調試工具&#xff1a;hdc 在使用 OpenHarmony 4.1 Release&#xff08;礦鴻系統&#xff09;進行開發時&#xff0c;遇到這樣的問題&#xff1a; &#x1f6a8; Shell 會在一段時間后自動退出…

Data Analysis TTAD=>CNN-BiGRU-MSA

TTAO 預處理、CNN-BiGRU-MSA 模型 時序數據回歸分析時序數據分析方法&#xff0c;特點&#xff1a;TTAO 預處理&#xff1a;通過三角拓撲結構增強時序特征的局部和全局關系混合模型架構&#xff1a;CNN 層提取局部特征模式BiGRU 捕獲雙向時序依賴多頭自注意力機制進行序列建模…

python-字典、集合、序列切片、字符串操作(筆記)

一、字符串常見操作&#xff08;重點&#xff09;?1.?2.字符串無法修改#錯誤示范 str1"djskds" str1[2]"3"3.?str1"abcand" # 輸出3 print(str1.index("and"))4.?str1"abcand" newStrstr1.replace("and",&quo…

【Android】EditText使用和監聽

三三想成為安卓糕手 一&#xff1a;用戶登錄校驗 1&#xff1a;EditText文本輸入框<EditTextandroid:id"id/et_user_name"android:layout_width"match_parent"android:layout_height"wrap_content"android:inputType"number"androi…

SQL 中根據當前時間動態計算日期范圍

在 SQL 中寫“動態時間”通常是指根據當前時間動態計算日期范圍&#xff0c;而不是寫死固定日期。以下是幾種常見寫法&#xff08;以 SQL Server / MySQL / PostgreSQL 為例&#xff09;&#xff1a;1. 獲取當前時間-- SQL Server SELECT GETDATE() AS now-- MySQL SELECT NOW(…

react-redux 類組件的 connect

store 目錄下 store/reducer.js import * as actionTypes from ./constantsconst initalState {counter: 100,banners: [],recommends: [] }/*** 定義reducer函數&#xff1a;純函數* param 參數一&#xff1a;store中目前保存的state* param 參數二&#xff1a;通過 dispatch…

數據分布是如何影響目標檢測精度

文章目錄一、研究背景與目標模型效果提升數據集優化二、研究問題明細各方向的關聯性與核心邏輯1. 高質量數據集的高效篩選與主動學習應用2. 基于推理結果的數據補充與增強方向優化3. 多類別場景下目標尺度與模型精度的關聯性4. 損失函數與數據增強對精度的量化影響5. 目標類型專…

高效批量轉換Java接口為MCP服務:降低重復勞動的實戰指南

高效批量轉換Java接口為MCP服務:降低重復勞動的實戰指南 在AI大模型技術飛速發展的今天,企業需要將現有Java接口快速適配為模型計算協議(MCP,Model Calculation Protocol)服務,以便與大模型生態無縫對接。然而,手動逐個轉換接口不僅耗時耗力,還容易因人為疏忽導致錯誤…

Eclipse Debug 配置指南

Eclipse Debug 配置指南 引言 Eclipse 作為一款功能強大的集成開發環境(IDE),在Java開發者中享有盛譽。在開發過程中,調試功能是必不可少的。本文將詳細介紹如何在Eclipse中配置調試環境,以便更高效地進行代碼調試。 1. 開發環境準備 在開始配置Eclipse調試環境之前,…

modelscope ProxyError: HTTPSConnectionPool(host=‘www.modelscope.cn‘, port=443)

目錄 Windows CMD&#xff1a; powershell Linux / macOS / Git Bash&#xff1a; win11 設置全局系統變量代理 modelscope ProxyError: HTTPSConnectionPool(hostwww.modelscope.cn, port443) 報錯&#xff1a; requests.exceptions.ProxyError: HTTPSConnectionPool(host…

Python學習之——序列化與反序列化

Python學習之——序列化與反序列化yaml & json & xmlyamljsonPython自帶Json庫xml一個綜合示例pickle & msgpack & marshalpicklemsgpackmarshal自定義導出py文件一個導出py文件的示例yaml & json & xml YAML & JSON &XML 如何選擇 yaml Py…

設計模式之代理模式:掌控對象訪問的優雅之道

代理模式&#xff1a;掌控對象訪問的優雅之道 引言&#xff1a;設計模式的重要性 在軟件開發中&#xff0c;設計模式是解決常見問題的可復用方案&#xff0c;它們如同建筑師的藍圖&#xff0c;為開發者提供了經過驗證的最佳實踐。在23種經典設計模式中&#xff0c;代理模式因其…

sqli-labs靶場通關筆記:第18-19關 HTTP頭部注入

第18關 User-Agent注入登錄正確的用戶名密碼&#xff0c;它會將User-Agent的信息回顯到頁面上。猜測UA頭可能存在注入點。利用bp抓包&#xff0c;在UA頭后面加一個單引號&#xff0c;發現報錯了。觀察報錯信息&#xff0c;顯示nearxx,admin)&#xff0c;推測后面應該還有兩個參…

基于按鍵開源MultiButton框架深入理解代碼框架(三)(指針的深入理解與應用)

文章目錄3、分析代碼3.3 按鍵的插入3.4 按鍵的刪除3.5 繼續分析狀態機核心理解4、寫在最后的總結5、思想感悟篇6、慈悲不渡自絕人3、分析代碼 3.3 按鍵的插入 // Button handle list headstatic Button* head_handle NULL;/*** brief Start the button work, add the handle…