SpringCloud配置中心:Config Server與配置刷新機制

在這里插入圖片描述

文章目錄

    • 引言
    • 一、Config Server基礎架構
      • 1.1 Server端配置
      • 1.2 配置文件命名規則
    • 二、Config Client配置
      • 2.1 Client端配置
      • 2.2 配置注入與使用
    • 三、配置刷新機制
      • 3.1 手動刷新配置
      • 3.2 使用Spring Cloud Bus實現自動刷新
      • 3.3 配置倉庫Webhook自動觸發刷新
    • 四、高級配置管理策略
      • 4.1 配置加密與解密
      • 4.2 多環境配置管理
      • 4.3 配置備份與回滾
    • 總結

引言

在微服務架構中,配置管理是一個關鍵挑戰。隨著服務數量的增加,分散在各個服務中的配置文件變得難以維護和統一管理。Spring Cloud Config提供了一套完整的配置中心解決方案,支持配置的集中管理、版本控制和動態更新。本文將深入探討Spring Cloud Config的核心組件、配置方式以及實現動態配置刷新的多種機制,幫助開發者構建高效的配置管理系統。

一、Config Server基礎架構

Spring Cloud Config Server是配置中心的核心組件,負責從配置倉庫(如Git、SVN或本地文件系統)中讀取配置信息,并將其暴露為REST API。客戶端服務通過HTTP請求從Config Server獲取所需的配置,從而實現配置的統一管理。

1.1 Server端配置

首先,創建一個Config Server需要添加相關依賴并進行基本配置:

/*** Config Server啟動類*/
@SpringBootApplication
@EnableConfigServer  // 啟用配置服務器功能
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}

application.yml中配置Config Server:

server:port: 8888spring:application:name: config-servercloud:config:server:git:uri: https://github.com/organization/config-repo  # 配置文件存儲庫search-paths: '{application}'  # 搜索路徑,支持占位符default-label: main  # Git分支username: ${git.username}  # Git用戶名password: ${git.password}  # Git密碼clone-on-start: true  # 啟動時克隆倉庫force-pull: true  # 強制拉取更新

1.2 配置文件命名規則

Config Server支持多種配置文件命名規則,以適應不同的應用場景:

  • {application}-{profile}.yml: 應用名-環境名
  • {application}-{profile}.properties: 同上,使用properties格式
  • {application}/{profile}/{label}: REST API路徑格式

例如,order-service-dev.ymlorder-service-prod.yml分別表示訂單服務在開發環境和生產環境的配置。

二、Config Client配置

服務通過Config Client從Config Server獲取配置。配置客戶端需要添加相關依賴并進行基本設置。

2.1 Client端配置

首先在pom.xml中添加Config Client依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

然后在bootstrap.yml中配置Client:

spring:application:name: order-service  # 應用名,用于匹配配置文件cloud:config:uri: http://localhost:8888  # Config Server地址profile: dev  # 環境標識label: main  # Git分支fail-fast: true  # 獲取配置失敗時快速失敗retry:initial-interval: 1000max-attempts: 6max-interval: 2000multiplier: 1.1

2.2 配置注入與使用

在服務中,可以通過多種方式使用集中管理的配置:

/*** 使用@Value注解注入配置*/
@RestController
@RequestMapping("/api/orders")
public class OrderController {@Value("${order.payment-timeout}")private int paymentTimeout;@GetMapping("/timeout")public Map<String, Object> getTimeout() {return Collections.singletonMap("paymentTimeout", paymentTimeout);}
}/*** 使用@ConfigurationProperties批量注入配置*/
@Component
@ConfigurationProperties(prefix = "order")
public class OrderProperties {private int paymentTimeout;private String paymentGateway;private boolean enableNotification;// getter和setter方法
}

三、配置刷新機制

在微服務系統中,動態更新配置而不重啟服務是一個重要需求。Spring Cloud Config支持多種配置刷新機制,滿足不同場景的需求。

3.1 手動刷新配置

最簡單的刷新方式是通過Actuator端點手動觸發:

/*** 啟用刷新端點*/
@SpringBootApplication
@EnableDiscoveryClient
@RefreshScope  // 開啟刷新范圍
public class OrderServiceApplication {public static void main(String[] args) {SpringApplication.run(OrderServiceApplication.class, args);}
}

在需要動態刷新配置的Bean上添加@RefreshScope注解:

/*** 支持配置刷新的組件*/
@Service
@RefreshScope
public class PaymentService {@Value("${order.payment-gateway}")private String paymentGateway;public String processPayment(double amount) {// 使用配置的支付網關處理付款return "Payment processed through " + paymentGateway;}
}

通過POST請求觸發刷新:

curl -X POST http://localhost:8080/actuator/refresh

3.2 使用Spring Cloud Bus實現自動刷新

手動刷新在服務實例較多時效率低下。Spring Cloud Bus通過消息總線連接各個服務實例,實現配置的批量自動刷新。

添加相關依賴:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

配置RabbitMQ連接:

spring:rabbitmq:host: localhostport: 5672username: guestpassword: guest

通過發送一個POST請求到Config Server或任意服務實例的bus-refresh端點,可以觸發所有服務的配置刷新:

curl -X POST http://localhost:8888/actuator/busrefresh

3.3 配置倉庫Webhook自動觸發刷新

為了實現完全自動化的配置更新,可以使用Git倉庫的Webhook功能,在配置變更時自動觸發刷新:

/*** 配置Webhook監聽器*/
@Profile("webhook")
@Configuration
public class WebhookConfig {@Bean@ConditionalOnProperty(name = "spring.cloud.config.server.monitor.enabled", havingValue = "true")public RefreshRemoteApplicationListener refreshRemoteApplicationListener() {return new RefreshRemoteApplicationListener();}
}

在Config Server中配置webhook端點:

spring:cloud:config:server:monitor:enabled: trueendpoint:path: /monitor  # Webhook接收端點

在Git倉庫中配置Webhook,當配置文件變更時觸發http://<config-server>/monitor端點。

四、高級配置管理策略

除了基本的配置管理和刷新機制外,Spring Cloud Config還支持一些高級特性,可以進一步提升配置管理的靈活性和安全性。

4.1 配置加密與解密

為了保護敏感配置,Spring Cloud Config支持配置值的加密和解密:

/*** 配置加密解密組件*/
@Configuration
public class EncryptionConfig {@Beanpublic RsaSecretEncryptor rsaSecretEncryptor() {// 從密鑰庫加載密鑰對return new RsaSecretEncryptor("keystore.jks", "password", "alias");}
}

在配置文件中使用加密值:

spring:datasource:username: dbuserpassword: '{cipher}AQA...'  # 加密后的密碼

4.2 多環境配置管理

在實際應用中,通常需要為不同環境維護不同的配置:

# application.yml (共享配置)
logging:level:root: INFO# order-service-dev.yml (開發環境)
spring:datasource:url: jdbc:mysql://localhost/orderdb# order-service-prod.yml (生產環境)
spring:datasource:url: jdbc:mysql://prod-db/orderdb

可以通過指定profile參數來獲取特定環境的配置:

spring:cloud:config:profile: dev  # 開發環境

4.3 配置備份與回滾

利用Git的版本控制特性,可以實現配置的備份與回滾:

/*** 自定義環境倉庫* 支持配置版本查詢和回滾*/
@Configuration
public class VersionedEnvironmentRepository extends JGitEnvironmentRepository {public VersionedEnvironmentRepository(ConfigurableEnvironment environment) {super(environment);}/*** 獲取指定版本的配置*/public Environment findOne(String application, String profile, String label, String version) {try {Git git = createGitClient();CheckoutCommand checkout = git.checkout();checkout.setName(version).call();return findOne(application, profile, label);} catch (Exception e) {throw new IllegalStateException("Cannot checkout version: " + version, e);}}
}

總結

Spring Cloud Config提供了一套完整的配置中心解決方案,通過Config Server集中管理配置,結合Git等版本控制系統實現配置的版本管理,并支持多種配置刷新機制,滿足微服務架構下的配置管理需求。從手動刷新到消息總線自動刷新,再到Webhook觸發的自動更新,不同機制適用于不同的應用場景。通過配置加密、多環境管理和配置版本控制,可以構建安全、靈活的配置管理系統。

在實際應用中,可以根據系統規模和需求選擇合適的配置管理策略。對于小型系統,手動刷新可能足夠;而對于大型微服務系統,結合Spring Cloud Bus實現的自動刷新機制更為高效。通過合理使用Spring Cloud Config,可以大大簡化配置管理工作,提升系統的可維護性和靈活性。

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

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

相關文章

PyTorch生成式人工智能實戰:從零打造創意引擎

PyTorch生成式人工智能實戰&#xff1a;從零打造創意引擎 0. 前言1. 生成式人工智能1.1 生成式人工智能簡介1.2 生成式人工智能技術 2. Python 與 PyTorch2.1 Python 編程語言2.2 PyTorch 深度學習庫 3. 生成對抗網絡3.1 生成對抗網絡概述3.2 生成對抗網絡應用 4. Transformer4…

allure結合pytest生成測試報告

結合 pytest 和 Allure 可以生成詳細而美觀的測試報告&#xff0c;幫助測試人員和開發者更好地理解測試結果。這包括測試的執行情況、步驟、附件&#xff08;如截圖&#xff09;、分類以及優先級標記。下面是如何在 pytest 中使用 Allure 生成測試報告的步驟&#xff1a; 安裝…

STM32標準庫開發中斷流程

在STM32標準外設庫&#xff08;SPL&#xff09;開發中&#xff0c;外設中斷的處理流程通常如下&#xff1a; 一、標準庫外設中斷處理流程 &#xff08;1&#xff09;使能外設時鐘 在使用任何外設之前&#xff0c;都必須打開外設的時鐘。例如&#xff0c;使用USART1的中斷&…

【計算機網絡】-計算機網絡期末復習題復習資料

一、計算機網絡體系結構&#xff08;800字&#xff09; 1. OSI參考模型 七層結構&#xff1a;物理層→數據鏈路層→網絡層→傳輸層→會話層→表示層→應用層 各層核心功能&#xff1a; 物理層&#xff1a;比特流傳輸&#xff08;如RJ45、光纖接口&#xff09; 數據鏈路層&…

31天Python入門——第9天:再學函數

你好&#xff0c;我是安然無虞。 文章目錄 再學函數1. 變量在函數中的作用域2. 函數的參數傳遞.補充學習: 不定長參數*args和**kwargs 3. 值傳遞和引用傳遞補充學習: 把函數作為參數傳遞 4. 匿名函數5. python中內置的常用函數zip()map()filter()all()any() 6. 函數練習 再學函…

EasyUI數據表格中嵌入下拉框

效果 代碼 $(function () {// 標記當前正在編輯的行var editorIndex -1;var data [{code: 1,name: 1,price: 1,status: 0},{code: 2,name: 2,price: 2,status: 1}]$(#dg).datagrid({data: data,onDblClickCell:function (index, field, value) {var dg $(this);if(field ! …

【C語言】多進程/多線程

【C語言】多進程/多線程 參考鏈接多進程/多線程服務器1. 多進程服務器2. 多線程服務器 結語參考鏈接 參考鏈接 c 中文網 菜鳥 c 多進程/多線程服務器 多進程和多線程是常用的并發編程技術。它們都允許程序同時執行多個任務&#xff0c;提高了系統的資源利用率和程序的運行效率…

mysql 磐維(opengauss)tidb誤刪數據之高級恢復

Mysql參考&#xff1a; Mysql 8.0 XtraBackupMysqlbinlog 完全恢復 - 墨天輪 Mysql 8.0 XtraBackupMysqlbinlog 完全恢復[TOC]# 一、安裝mysql 8.0.19## 1.1https://www.modb.pro/db/509223MySQL 的全量備份、增量備份與 Binlog 時間點恢復_mysqlbinlog自動備份嗎-CSDN博客文章…

3. 軸指令(omron 機器自動化控制器)——>MC_SetPosition

機器自動化控制器——第三章 軸指令 11 MC_SetPosition變量?輸入變量?輸出變量?輸入輸出變量 功能說明?時序圖?重啟動運動指令?多重啟運動指令?異常 MC_SetPosition 將軸的指令當前位置和反饋當前位置變更為任意值。 指令名稱FB/FUN圖形表現ST表現MC_SetPosition當前位…

從 @SpringBootApplication 出發,深度剖析 Spring Boot 自動裝配原理

在 Spring Boot 的開發旅程中&#xff0c;SpringBootApplication 注解堪稱開啟便捷開發之門的鑰匙。它不僅是一個簡單的注解&#xff0c;更是理解 Spring Boot 自動裝配原理的重要入口。接下來&#xff0c;我們將以SpringBootApplication 為切入點&#xff0c;深入探究 Spring …

MySQL面試專題

1.什么是BufferPool&#xff1f; Buffer Pool基本概念 Buffer Pool&#xff1a;緩沖池&#xff0c;簡稱BP。其作用是用來緩存表數據與索引數據&#xff0c;減少磁盤IO操作&#xff0c;提升效率。 Buffer Pool由緩存數據頁(Page) 和 對緩存數據頁進行描述的控制塊 組成, 控制…

調用百度api實現語音識別(python)

該代碼實現了一個企業級的語音識別解決方案,通過調用百度語音識別API,實現實時錄音識別和對已有音頻語音識別功能。 百度智能云:請自行訪問百度智能云,開通免費的語音識別功能,獲取API_KEY和SECRET_KEY。操作按照百度流程即可,可免費申請。 首先,配置下百度API和描述下錯…

KRaft模式

目錄標題 Kraft模式**1. 什么是Kraft模式&#xff1f;****2. 為什么引入Kraft模式&#xff1f;****3. 核心優勢****4. 架構與工作原理****5. 部署與配置要點****6. 適用場景與最佳實踐****總結**KIP-833: Mark KRaft as Production Ready除了Kraft模式&#xff0c;Kafka還有以下…

單片機電路中常見的英文術語及縮寫

以下是單片機電路中常見的英文術語及縮寫的解釋及其作用說明&#xff0c;按功能分類整理&#xff0c;便于理解&#xff1a; 一、核心術語 MCU (Microcontroller Unit) ? 中文&#xff1a;微控制器單元 ? 作用&#xff1a;單片機的核心芯片&#xff0c;集成CPU、存儲器、外設接…

常見框架漏洞之一:Thinkphp5x

ThinkPHP是為了簡化企業級應?開發和敏捷WEB應?開發?誕?的&#xff0c;是?個快速、兼容?且簡單的輕量級國產PHP開發框架&#xff0c;誕?于2006年初&#xff0c;原名FCS&#xff0c;2007年元旦正式更名為 ThinkPHP&#xff0c;遵循Apache2開源協議發布&#xff0c;從Stru…

2025年優化算法:龍卷風優化算法(Tornado optimizer with Coriolis force,TOC)

龍卷風優化算法&#xff08;Tornado optimizer with Coriolis force&#xff09;是發表在中科院二區期刊“ARTIFICIAL INTELLIGENCE REVIEW”&#xff08;IF&#xff1a;11.7&#xff09;的2025年智能優化算法 01.引言 當自然界的狂暴之力&#xff0c;化身數字世界的智慧引擎&…

面試中如何回答性能優化的問題

性能問題和Bug不同,后者的分析和解決思路更清晰,很多時候從應用日志(文中的應用指分布式服務下的單個節點)即可直接找到問題根源,而性能問題,其排查思路更為復雜一些。 對應用進行性能優化,是一個系統性的工程,對工程師的技術廣度和技術深度都有所要求。一個簡單的應用…

CMake 函數和宏

CMake 函數 CMake 函數定義語法如下, 其中 name 為函數名, <arg1> 為參數名, <commands> 為函數體. 函數定義后, 可以通過 name 調用函數. 函數名允許字母數字下劃線, 不區分大小寫. function(name [<arg1> ...])<commands> endfunction()如下的樣例…

【QA】Qt有哪些迭代器模式的應用?

在 Qt/C 中&#xff0c;迭代器模式的設計主要分為 標準 C 風格 和 Qt 框架特有風格&#xff0c;以下結合代碼詳細說明兩種實現方式的關鍵設計及其應用場景&#xff1a; 一、Qt 框架中的迭代器模式設計 Qt 提供了兩種迭代器風格&#xff1a;Java 風格&#xff08;顯式迭代器&am…

Mysql表的簡單操作

&#x1f3dd;?專欄&#xff1a;Mysql_貓咪-9527的博客-CSDN博客 &#x1f305;主頁&#xff1a;貓咪-9527-CSDN博客 “欲窮千里目&#xff0c;更上一層樓。會當凌絕頂&#xff0c;一覽眾山小。” 目錄 3.1 創建表 3.2 查看表結構 3.3 修改表 1. 添加字段 2. 修改字段 3…