当前位置: 首页 > article >正文

【微服务架构】SpringCloud(七):配置中心 Spring Cloud Config

文章目录

  • 配置中心
      • 为什么需要配置中心
      • 配置中心介绍
    • 服务搭建
      • 基于GITHUB
        • 1.创建仓库
        • 2.新建微服务作为配置中心服务
        • 3.启动测试拉取
      • 匹配规则
      • 分支读取
    • 客户端配置
      • 配置文件
      • 引入依赖
      • 使用远程配置
    • 刷新配置
      • 手动配置热更新
      • 自动刷新
        • erlang安装
        • RabbitMQ安装
        • 环境变量
        • 管理界面
        • 服务配置
        • 测试
    • 完整配置
      • Config
        • application.properties
        • 启动类
        • 依赖
      • Consumer
        • bootstrap.properties
        • 依赖
      • 远程配置
        • consumer-dev.properties
  • 总结
    • Spring Cloud Config
      • 服务端(Config Server)
        • 1. 添加依赖
        • 2. 启用 Config Server
        • 3. 配置仓库
      • 客户端(Config Client)
        • 1. 添加依赖
        • 2. 配置 Config Server 地址
        • 3. 获取配置
    • 配置的动态刷新
      • 使用 Spring Cloud Bus
        • 1. 添加依赖
        • 2. 配置消息中间件
        • 3. 启用动态刷新
    • 注意事项

在这里插入图片描述
个人主页:道友老李
欢迎加入社区:道友老李的学习社区

配置中心

为什么需要配置中心

单体应用,配置写在配置文件中,没有什么大问题。如果要切换环境 可以切换不同的profile(2种方式),但在微服务中。

  1. 微服务比较多。成百上千,配置很多,需要集中管理。

  2. 管理不同环境的配置。

  3. 需要动态调整配置参数,更改配置不停服。

配置中心介绍

分布式配置中心包括3个部分:

  1. 存放配置的地方:git ,本地文件 等。
  2. config server。从 1 读取配置。
  3. config client。是 config server 的客户端 消费配置。

服务搭建

基于GITHUB

1.创建仓库

登录GitHub创建仓库,并上传几个配置文件

2.新建微服务作为配置中心服务

依赖

		<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

配置文件

spring.cloud.config.server.git.uri=https://github.com/piziniao/config-center.git
spring.cloud.config.label=mastereureka.client.service-url.defaultZone=http://euk1.com:7002/eureka/

启动类

package com.dyll.admin;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@EnableConfigServer
@SpringBootApplication
public class AConfigApplication {public static void main(String[] args) {SpringApplication.run(AConfigApplication.class, args);}}
3.启动测试拉取

启动服务后访问服务

http://localhost:70/master/config-client-dev.properties

正确配置后能读到来自git的配置文件

匹配规则

获取配置规则:根据前缀匹配
/{name}-{profiles}.properties
/{name}-{profiles}.yml
/{name}-{profiles}.json
/{label}/{name}-{profiles}.ymlname 服务名称
profile 环境名称,开发、测试、生产:dev qa prd
lable 仓库分支、默认master分支匹配原则:从前缀开始。

分支读取

客户端配置

配置文件

修改 application.properties为bootstrap.properties

#直接URL方式查找配置中心
spring.cloud.config.uri=http://localhost:9999/
#通过注册中心查找
#spring.cloud.config.discovery.enabled=true
#spring.cloud.config.discovery.service-id=a-config
spring.cloud.config.profile=dev
spring.cloud.config.label=dev

引入依赖

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

使用远程配置

	@Value("${config.info}")String info;

consumer-dev.properties

config.info="config-dev,v1"

刷新配置

手动配置热更新

  1. 开启actuator中的refresh端点
  2. Controller中添加@RefreshScope注解
  3. 向客户端 url http://localhost:91/actuator/refresh发送Post请求

自动刷新

erlang安装

http://www.erlang.org/downloads

RabbitMQ安装

http://www.rabbitmq.com/install-windows.html

环境变量

path中添加 %ERLANG_HOME%\bin

# 开启RabbitMQ节点
rabbitmqctl start_app
# 开启RabbitMQ管理模块的插件,并配置到RabbitMQ节点上
rabbitmq-plugins enable rabbitmq_management
管理界面

http://localhost:15672

用户名密码均为guest

服务配置

配置文件

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

依赖

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

启动两个微服务

修改配置文件后向其中一个端点发送post请求

http://localhost:91/actuator/bus-refresh

观察另一个服务是否也跟着刷新了

完整配置

Config

application.properties
#################################### common config : ####################################
spring.application.name=a-config
# 应用服务web访问端口
server.port=9999
# ActuatorWeb访问端口
management.server.port=8081
management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=alwaysspring.cloud.config.server.git.uri=https://github.com/piziniao/config-center.git
spring.cloud.config.label=mastereureka.client.service-url.defaultZone=http://euk1.com:7002/eureka/spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
启动类
@EnableConfigServer
依赖
		<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency>

Consumer

bootstrap.properties
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=a-config
spring.cloud.config.profile=dev
spring.cloud.config.label=devspring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
依赖
		<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-client</artifactId></dependency>

远程配置

consumer-dev.properties
config.info="config-dev,v8"

总结

Spring Cloud 配置中心用于集中管理和存储应用程序的配置信息,支持配置的动态刷新、版本管理等功能,能让你在不同环境(开发、测试、生产)下更方便地管理配置。下面为你介绍 Spring Cloud 配置中心的主要组件及使用方法。

Spring Cloud Config

Spring Cloud Config 是 Spring Cloud 官方提供的配置中心解决方案,它由服务端和客户端两部分组成。

服务端(Config Server)

Config Server 作为配置中心的核心,负责从配置仓库(如 Git、SVN 等)中读取配置信息,并以 RESTful 接口的形式提供给客户端使用。

1. 添加依赖

pom.xml 中添加以下依赖:

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency>
</dependencies>
2. 启用 Config Server

在 Spring Boot 主类上添加 @EnableConfigServer 注解:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);}
}
3. 配置仓库

application.propertiesapplication.yml 中配置 Git 仓库信息:

spring.cloud.config.server.git.uri=https://github.com/your-repo/config-repo.git

客户端(Config Client)

Config Client 是使用配置的应用程序,它会从 Config Server 获取配置信息。

1. 添加依赖

pom.xml 中添加以下依赖:

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency>
</dependencies>
2. 配置 Config Server 地址

bootstrap.propertiesbootstrap.yml 中配置 Config Server 的地址:

spring.cloud.config.uri=http://localhost:8888
3. 获取配置

在客户端应用中,可以通过 @Value 注解或 Environment 对象获取配置信息:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConfigClientController {@Value("${config.property}")private String configProperty;@GetMapping("/config")public String getConfig() {return configProperty;}
}

配置的动态刷新

若要实现配置的动态刷新,可结合 Spring Cloud Bus 或使用 Actuator 的 /refresh 端点。

使用 Spring Cloud Bus

Spring Cloud Bus 是一个消息总线,借助它可以将配置刷新的消息广播到所有客户端。

1. 添加依赖

在 Config Server 和客户端的 pom.xml 中添加以下依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2. 配置消息中间件

application.propertiesapplication.yml 中配置 RabbitMQ 信息:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
3. 启用动态刷新

在客户端的控制器类上添加 @RefreshScope 注解:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RefreshScope
public class ConfigClientController {@Value("${config.property}")private String configProperty;@GetMapping("/config")public String getConfig() {return configProperty;}
}

当修改配置仓库中的配置后,向 Config Server 发送 /actuator/bus-refresh 请求,Spring Cloud Bus 会将刷新消息广播到所有客户端。

注意事项

  • 确保 Config Server 能访问配置仓库,并且客户端能访问 Config Server。
  • 合理设置配置的环境和标签,以区分不同环境和版本的配置。

相关文章:

【微服务架构】SpringCloud(七):配置中心 Spring Cloud Config

文章目录 配置中心为什么需要配置中心配置中心介绍 服务搭建基于GITHUB1.创建仓库2.新建微服务作为配置中心服务3.启动测试拉取 匹配规则分支读取 客户端配置配置文件引入依赖使用远程配置 刷新配置手动配置热更新自动刷新erlang安装RabbitMQ安装环境变量管理界面服务配置测试 …...

突破次元壁:基于Unity的MCP方案,用Claude一键生成完整游戏

在当今快速发展的技术领域,AI与游戏开发的结合正带来前所未有的创新。今天,我们将介绍一种革命性的解决方案——基于Unity的MCP(Model-Code-Pipeline)方案,通过Claude的强大自然语言处理能力,直接生成可玩的游戏!只需简单输入提示词,AI就能自动打开Unity并为你开发出一…...

Linux学习笔记(应用篇二)

基于I.MX6ULL.MINI开发板 开发板与电脑相互通信电脑与开发板互传文件 开发板与电脑相互通信 用网线将电脑与开发板连接 本人使用的是Ubuntu系统&#xff0c;不是虚拟机 一般来说刚开始电脑和开发板是ping不通的 首先查看电脑的 IP WinR&#xff0c;cmd调出终端 我使用的是…...

记录一次部署k3s后,服务404 page not found,nginx显示正常

服务部署k3s后&#xff0c;正常入口端怎么返回都是80&#xff0c;且返回错误 TRAEFIK DEFAULT CERT ERR_CERT_AUTHORITY_INVALID ngnix显示也是正常&#xff0c;怎么找也找不到问题 后来通过 iptables -L -n -t nat|grep 80 发现入口端流量被DNAT转到新的服务 而k3s中&#…...

mac上安装nvm及nvm的基本语法使用!!

种一棵树&#xff0c;最好是十年前&#xff0c;其次是现在&#xff01;想要改变&#xff0c;从此刻开始&#xff0c;一切都不晚&#xff01; 目录 nvm是什么&#xff1f;前提条件&#xff1a;安装homebrew如果系统已经有node版本&#xff1a;在mac上安装nvm&#xff1a;用nvm安…...

(基本常识)C++中const与引用——面试常问

作者&#xff1a;求一个demo 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 内容通俗易懂&#xff0c;没有废话&#xff0c;文章最后是面试常问内容&#xff08;建议通过标题目录学习&#xff09; 废话不多…...

ES 加入高亮设置

searchTextQueryOne new MatchQuery.Builder().field(searchFieldOne).query(searchText).build();// 帮助中心文档切分 只查询6条Integer finalTopK 10;List<String> newReturnFileds returnFields;newReturnFileds.add("kid"); // 需要返回kidHighlight h…...

dfs(深度优先)——太抽象了

1. 两种方法 #include<bits/stdc.h> using namespace std; //void dfs(int index,int n,vector<int> current) //{ // if(index>n){ // for(int i0;i<current.size();i){ // cout<<current[i]<<" "; // } // cout<<endl;…...

5分钟学会interface(纯标题党)

Golang中的interface&#xff08;接口&#xff09; 接口的定义 在 Go 语言中&#xff0c;接口&#xff08;interface&#xff09; 是一种特殊的类型&#xff0c;它定义了一组方法&#xff0c;而不关心具体的实现。任何类型只要实现了这些方法&#xff0c;就可以被认为满足这个…...

deepseek实战教程-第五篇支持deepseek的大模型应用安装及使用

目录 一.AnythingLLM 1.2 设置管理 1.3 关联知识库到对话 二.Cherrystudio 2.1 添加知识库文件 2.1.1 cherrystudio 2.1.2 anythingLLM 2.2 和知识库对话 三.AI产品落地之DIFY 3.1 安装Docker 3.2 下载dify压缩包 3.3 文件解压缩 3.4 文件重命名 3.5 设置模型 …...

嵌入式Linux RK3399启动模式及分区技术详解

嵌入式Linux RK3399启动模式及分区技术详解 一、RK3399启动模式分析 RK3399作为瑞芯微推出的高性能嵌入式处理器&#xff0c;其启动模式分为闭源与开源两种方案&#xff0c;核心区别在于前级Loader的实现方式。 1. 闭源启动流程 采用瑞芯微官方提供的闭源固件&#xff0c;流…...

python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测

dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python3.8 opencv-python4.11.0.86 face_recognition1.3.0 dlib19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img cv2.imread(r"C:\Users\123\…...

redis解决缓存穿透/击穿/雪崩

文章目录 1.缓存穿透1.1 概念1.2 解决方案1.2.1 缓存空对象1.2.2 布隆过滤 1.2 店铺查询使用缓存穿透解决方案1.2.1 流程 2.缓存雪崩2.1 什么是缓存雪崩&#xff1f;2.2 雪崩解决方案 3.缓存击穿3.1 什么是缓存击穿&#xff1f;3.2解决方案3.2.1 基于互斥锁解决缓存击穿问题&am…...

特征工程自动化(FeatureTools实战)

目录 特征工程自动化(FeatureTools实战)1. 引言2. 项目背景与意义2.1 特征工程的重要性2.2 自动化特征工程的优势2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 自动化特征工程理论基础4.1 特征工程的基本概念4.2 FeatureTools库简介4.3 关键公…...

哈希表简单例子

一、题意 给定一个整数数组&#xff0c;判断数组中是否存在重复的元素。如果存在一值在数组中出现至少两次&#xff0c;函数返回 True &#xff1b;如果数组中每个元素都不相同&#xff0c;则返回 False 。 输入: [1, 2, 3, 1] 输出: True 输入: [1, 2, 3, 4] 输出: False …...

利用GitHub Pages快速部署前端框架静态网页

文章目录 前言GitHub Pages 来部署前端框架&#xff08;Vue 3 Vite&#xff09;项目1、配置 GitHub Pages 部署2、将项目推送到 GitHub3、部署到 GitHub Pages4、访问部署页面5、修改代码后的更新部署顺序 前言 可以先参考&#xff1a; 使用 GitHub Pages 快速部署静态网页: …...

《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型理解重叠 I/O 模型重叠 I/O本章讨论的重叠 I/O 的重点不在于 I/O 创建重叠 I/O 套接字执行重叠 I/O 的 WSASend 函数进行重叠 I/O 的 WSA…...

Skynet 中 snlua 服务启动整体流程分析

前言&#xff1a; 在 Skynet 中&#xff0c;Lua 扮演了极其重要的角色。Skynet 大多数业务逻辑都跑在一个个 Lua 服务里&#xff0c;而能够将 Lua 环境嵌入到 Skynet 框架下&#xff0c;并与 Skynet 消息调度机制完美结合&#xff0c;正是 snlua 服务所承担的核心功能。 本文将…...

python每日十题(10)

在Python语言中&#xff0c;源文件的扩展名&#xff08;后缀名&#xff09;一般使用.py。 保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。Python 3.x有35个关键字&#xff0c;分别为&#xff1a;and&#xff0c;as&#xff0c;assert&am…...

基于大模型预测的初治菌阳肺结核诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、初治菌阳肺结核概述 2.1 疾病定义与病理机制 2.2 流行病学特征 2.3 传统诊疗方法与局限性 三、大模型在初治菌阳肺结核预测中的应用原理 3.1 大模型技术简介 3.2 数据收集与预处理 3.3 模型构建与训练 3.4 模型…...

嵌入式系统应用-音乐播放器-按键版本

音乐播放器-按键版本 1 背景介绍1.1 导入音乐播放器1.2 导入按键扫描按键包 2 功能设计2.1 需求分析2.2 程序架构设计2.3 相关知识储备 3 代码编写3.1 led代码实现3.2 按键扫描3.3 音乐播放线程 4 低功耗设计4.1 睡眠模式4.2 停止模式4.3 待机模式 1 背景介绍 这个音乐播放器分…...

LabVIEW液压振动锤控制系统

在现代工程机械领域&#xff0c;液压振动锤的高效与精准控制日益显得重要。本文通过LabVIEW软件&#xff0c;展开液压振动锤启停共振控制技术的研究与应用&#xff0c;探讨如何通过改进控制系统来优化液压振动锤的工作性能&#xff0c;确保其在复杂工况下的稳定性与效率。 ​ …...

简单介绍My—Batis

1.什么是My—Batis&#xff1f; My—Batis是一个持久层框架&#xff0c;提供了sql映射功能&#xff0c;能方便的将数据库表和java对象进行映射&#xff0c;通过My—Batis可以将项目中的数据存储在数据库中&#xff0c;以便我们进行调用。值得注意的是My—Batis和spring不是一回…...

ALTER TABLE SHRINK SPACE及MOVE的区别与适用场景

以下是 ‌Oracle 数据库‌中三个收缩表空间命令的对比&#xff1a; 1. ALTER TABLE table_name SHRINK SPACE;‌ ‌作用‌&#xff1a;直接重组表数据并移动高水位线&#xff08;HWM&#xff09;&#xff0c;释放未使用的空间到表空间‌。 影响‌&#xff1a; 会锁表&#…...

车载通信方案为何选择CAN/CANFD?

摘要 随着汽车电子技术的飞速发展&#xff0c;车载通信系统在车辆的智能化、网联化进程中扮演着至关重要的角色。控制器局域网络&#xff08;CAN&#xff09;及其扩展版本CANFD凭借其卓越的可靠性、高效的数据传输能力和强大的抗干扰特性&#xff0c;成为现代汽车通信架构的核心…...

docker远程debug

1. 修改 Java 启动命令 在 Docker 容器中启动 Java 程序时&#xff0c;需要添加 JVM 调试参数&#xff0c;jdk8以上版本 java -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 -jar your-app.jar jdk8及以下版本&#xff1a; java -Xdebug -Xrunjdwp:tra…...

rosbag|ROS中.bag数据包转换为matlab中.mat数据类型

代码见代码 msg_dict中设置自定义消息类型 test_config中设置需要记录的具体的值 test_config中topic_name以及message_type照搬plotjuggler打开时的参数 最后生成.mat文件在matlab中进行使用...

Java编程思想:为何有时要将子类对象赋值给父类引用

为何有时要将子类对象赋值给父类引用&#xff0c;用父类来进行实例化&#xff1f; 这就要说多态的优势: 代码的扩展性和降低耦合度&#xff0c;而不是完全避免修改代码。 TuXing t new Changfangxing(); Changfangxing k (Changfangxing)t;原因1&#xff1a; 代码可拓展性 …...

pytest-xdist 进行高效并行自动化测试

pytest-xdist 的核心功能是通过多进程分发测试任务&#xff0c;每个进程独立运行测试&#xff0c;确保测试隔离。2025 年 3 月 25 日&#xff0c;pytest-xdist 在 GitHub 上已有超过 1,200,000 次下载&#xff0c;表明其在测试社区中的广泛接受。 在自动化测试中&#xff0c;随…...

位置编码再思考

最近在做多模态&#xff0c;发现基于 transformer 的多模态&#xff0c;position embedding 是一个非常重要的内容&#xff0c;而且还没有统一方案&#xff0c;先暂做记录&#xff0c;几篇还不错的博客&#xff1a; Transformer学习笔记一&#xff1a;Positional Encoding&…...