SpringCloud学习笔记 - 分布式配置中心 - config

news2024/12/23 22:44:42

1. 简介

Spring Cloud Config是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持的。
它由服务端和客户端构成:
其中,服务端也称为分布式配置中心,是一个独立的微服务应用,用来连接配置仓库、为客户端提供支持;
客户端则一般是各个微服务应用本身,它们通过指定服务端来管理自身的配置。
Spring Cloud Config默认支持Git作为配置仓库,存储各个微服务的配置信息,同时也能支持其他的存储方式,如:码云、SVN、本地化文件系统。

2. 服务端配置

使用码云仓库作为“配置文件管理中心”,对配置文件进行统一管理。

  1. 创建码云账号,并新建仓库springcloud-config,可以设置为私密库
    在这里插入图片描述

  2. 安装git,并配置码云账户信息

  3. 使用git,拉取仓库,在仓库中创建配置文件后,提交新建的配置文件信息到码云仓库
    在这里插入图片描述

config-dev.yml

config:
  info: "master branch,springcloud-config/config-dev.yml version=1"

config-prod.yml

config:
  info: "master branch,springcloud-config/config-prod.yml version=1"

config-test.yml

config:
  info: "master branch,springcloud-config/config-test.yml version=1" 
  1. idea集成git
    在这里插入图片描述

  2. 创建module,添加配置中心的核心pom引用
    在这里插入图片描述

<dependencies>
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>
  1. 主启动类使用注解@EnableConfigServer开启配置中心
@SpringBootApplication
@EnableConfigServer
public class MainAppConfigCenter3344 {
    public static void main(String[] args) {
        SpringApplication.run(MainAppConfigCenter3344.class,args);
    }
}
  1. 在application.yaml中配置相关信息,并将配置中心微服务注册到注册中心
server:
  port: 3344

spring:
  application:
    name:  cloud-config-center #注册进Eureka服务器的微服务名
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/qianghao/springcloud-config.git #GitHub上面的git仓库名字
          ####搜索目录
          search-paths:
            - springcloud-config
          username: 你的码云账号
          password: 你的码云密码
      label: master

#服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://eureka-server-7001:7001/eureka/
  1. 修改本机Windows下的hosts文件,添加域名映射,启动注册中心和配置中心,使用http://config-3344.com:3344/master/config-dev.yml访问配置文件
127.0.0.1		config-3344.com

测试:
在这里插入图片描述

  1. 配置读取规则:
    /{label}/{application}-{profile}.yml(推荐),例如:
    master分支
  • http://config-3344.com:3344/master/config-dev.yml
  • http://config-3344.com:3344/master/config-test.yml
  • http://config-3344.com:3344/master/config-prod.yml
    dev分支
  • http://config-3344.com:3344/dev/config-dev.yml
  • http://config-3344.com:3344/dev/config-test.yml
  • http://config-3344.com:3344/dev/config-prod.yml

3. 客户端配置

1. 新建客户端功能测试module:cloud-config-client-3355
2. 引入配置中心客户端的核心依赖:spring-cloud-starter-config

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
 </dependencies>

3. 创建系统级配置文件bootstrap.yaml

这里需要引入一个新的概念:系统级的资源配置项 - bootstrap.yaml

3.1. 加载顺序
若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载

bootstrap.yml 用于应用程序上下文的引导阶段。bootstrap.yml 由父Spring ApplicationContext加载。
3.2. 配置区别
bootstrap是spring cloud的配置上下文加载。由spring-cloud-content包加载。

bootstrap.yml 和 application.yml 都可以用来配置参数。

bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootStrap.yml 被加载,则内容不会被覆盖。

application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。
3.3. 属性覆盖问题
启动上下文时,Spring Cloud 会创建一个 Bootstrap Context,作为 Spring 应用的 Application Context 的父上下文。

初始化的时候,Bootstrap Context 负责从 外部源 加载 配置属性解析配置。这两个上下文共享一个从外部获取的 Environment。Bootstrap 属性有高优先级,默认情况下,它们不会被本地配置覆盖。

也就是说如果加载的 application.yml 的内容标签与 bootstrap 的标签一致,application 也不会覆盖 bootstrap,而 application.yml 里面的内容可以动态替换。

4. 因此我们需要从外部文件获取配置信息时,使用bootstrap.yaml就非常必要了。
创建bootstrap.yaml并写入以下配置:

server:
  port: 3355

spring:
  application:
    name: config-client
  cloud:
    #Config客户端配置
    config:
      label: master #分支名称
      name: config #配置文件名称
      profile: dev #读取后缀名称   上述3个综合:master分支上config-dev.yml的配置文件被读取http://config-3344.com:3344/master/config-dev.yml
      uri: http://config-3344.com:3344 #配置中心地址k

#服务注册到eureka地址
eureka:
  client:
    service-url:
      defaultZone: http://eureka-server-7001:7001/eureka/

5. 配置主启动类

@SpringBootApplication
@EnableEurekaClient
public class ConfigClientMain3355 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientMain3355.class,args);
    }
}

6. 编写业务类,获取配置信息

@RestController
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/configInfo")
    private String getConfigInfo(){
        return configInfo;
    }
}

7. 测试获取配置信息:http://localhost:3355/configInfo
在这里插入图片描述

4. 动态刷新配置信息

从上面bootstrap.yaml的介绍可以知道,它的优先级比较高,配置信息加载后一般是不会被覆盖,比如:

  • 我们现在对码云上的的配置文件内容做调整
  • 刷新3344,发现ConfigServer配置中心立刻响应
  • 刷新3355,发现ConfigClient客户端没有任何响应
  • 3355没有变化除非自己重启或者重新加载

如果需要重新加载配置信息就需要重新启动服务,这是非常不友好的。这时我们就需要一种可以动态刷新配置的方法 - actuator监控服务。

  1. 引入actuator监控服务的pom依赖:spring-boot-starter-actuator
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
  1. 在yaml中配置 actuator,添加暴露监控端口配置:
# 暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"
  1. 修改业务类
@RestController
@RefreshScope
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/configInfo")
    private String getConfigInfo(){
        return configInfo;
    }
}
  1. 发送刷新请求,Post方式请求刷新3355
curl -X POST "http://localhost:3355/actuator/refresh
  1. 测试:修改码云上的配置文件内容,并提交修改。然后发送post请求进行刷新,之后就可以获取最新的配置文件信息
    在这里插入图片描述

  2. 现在产生了新的问题:
    假如有多个微服务客户端3355/3366/3377怎么办?难道每个微服务都要进行请求刷新一次?
    可否广播,一次通知,处处生效? Bus消息总线就可以实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21161.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

32.nacos配置文件中心,使用实例(springcloud)

1.为什么使用Nacos 配置文件中心1.如果在生产情况下&#xff0c;修改了配置文件&#xff0c;项目需要下架&#xff0c;重新打包&#xff0c;重新发布。这在单机模式下影响不会太大&#xff0c;但如果过在一个集群项目中就会照成很大的影响&#xff0c;需要停掉多个项目。因此&a…

字节研发之道

前言 字节的迅速崛起缔造了一个互联网的神话&#xff0c;堪称火箭般的蹿升。当阿里来到第十八个年头时&#xff0c;员工人数还不足6万。老牌互联网腾讯现在也不过11万左右人数。但字节发展到七个年头时&#xff0c;人数就突破了10万。曾经入职阿里是一票难求&#xff0c;但现在…

基于51单片机的音乐盒播放器proteus仿真

资料编号&#xff1a;092 下面是相关功能视频演示&#xff1a; 92-基于51单片机的音乐盒播放器proteus仿真&#xff08;源码仿真全套资料&#xff09;功能介绍&#xff1a;使用51单片机&#xff0c;采用蜂鸣器进行音乐播放&#xff0c;提供了音乐代码生成器软件&#xff0c;可…

JavaWeb运行环境安装教程以及各个安装包

文章目录安装包下载安装教程一、JDK安装1、下载2、安装3、配置环境4、验证环境配置二、IDEA安装下载链接三、MySQL安装1、下载2、安装四、Navicat安装五、Tomcat安装1、下载2、环境配置3、修改编码4、启动六、Maven安装1、下载2、环境配置3、新建本地仓库4、修改镜像5、添加IDE…

Design Compiler工具学习笔记(1)

本人做过FPGA设计的项目&#xff0c;后面想转 IC 设计方向。现在从 DC 工具的使用开始学起&#xff0c;DC 是新思科技的EDA软件&#xff0c;具体的安装见下面的文章&#xff1a; Synopsys EDA Tools 安装问题记录https://blog.csdn.net/qq_43045275/article/details/127630241…

5G无线技术基础自学系列 | CloudRAN架构

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G在核心网实现云化之后&#xff0c;更…

2.旋转的骰子(1)

1.动画——旋转的骰子 我们想用纯html 和CSS, 做一个旋转的筛子,骰子要有立体感,每个面上要有圆点,表示点数,并且骰子可以原地旋转。 2.分析需求——庖丁解牛

【DELM回归预测】基于matlab多元宇宙优化算法改进深度学习极限学习机数据回归预测【含Matlab源码 2230期】

⛄一、多元宇宙优化算法 MVO是Seyedali Mirjalili受到多元宇宙理论的启发提出来的元启发式优化算法。主要根据多元宇宙理论的3个主要概念-白洞、黑洞和虫洞&#xff0c;来建立数学模型。 MVO算法中的可行解对应宇宙&#xff0c;解的适应度对应该宇宙的膨胀率&#xff0c;在每…

【第三部分 | 移动端开发】2:流式布局

目录 | 移动端布局 | 流式布局&#xff08;百分比布局&#xff09; | 案例&#xff1a;京东搜索页相关知识点 | 移动端布局 | 流式布局&#xff08;百分比布局&#xff09; 介绍 核心思想&#xff1a;不使用固定布局&#xff0c;而是使用百分比 为了保护盒子的内容不因拉伸…

Spring AOP使用与原理

AOP介绍 SpringAOP核心概念 上述中已经出现的关键词有Advice(顶级的通知类/拦截器)、MethodInvocation(方法连接点)、MethodInterceptor(方法拦截器) SpringAOP在此基础上又增加了几个类&#xff0c;丰富了AOP定义及使用概念&#xff0c;包括 Advisor&#xff1a;包含通知(拦截…

基于密度的划分、DBSCAN(机器学习)

目录 居于密度的划分 DBSCAN算法 居于密度的划分 基于划分聚类和基于层次聚类的方法在聚类过程中根据距离来划分类簇&#xff0c;因此只能够用于挖掘球状簇。 为了解决这一缺陷&#xff0c;基于密度聚类算法利用密度思想&#xff0c;将样本中的高密度区域(即样本点分布稠密的…

图的概念(1)

图是什么&#xff1f; 首先&#xff0c;我们导入需要的包&#xff1f; import numpy as np import random import networkx as nx from IPython.display import Image import matplotlib.pyplot as plt 图的定义&#xff1f; 图表示物件与物件之间关系的数学对象&#xff0c;…

Metasploit入门用法

靶机介绍 Difficult&#xff1a; As always, it’s a very easy box for beginners. Goal&#xff1a; Get flag Download&#xff1a;https://www.vulnhub.com/entry/funbox-scriptkiddie,725/ 解题过程&#xff1a; 1.使用nmap进行端口扫描:Nmap -sV IP 2.使用search命令查…

yolov5加入分割头,多任务头

Yolov5同时进行目标检测和分割分割_MidasKing的博客-CSDN博客_yolov5分割 用YOLOv5ds训练自己的数据集,注意点!_用猪头过日子.的博客-CSDN博客 基于pytorch用yolov5算法实现目标检测与分割_无损检测小白白的博客-CSDN博客 原理 代码:

一种三自由度机器人的设计(CAD+Solidworks+文档)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1课题研究背景及其意义 1 1.2三自由度机器人的发展与现状 1 1.3三自由度机器人的原理和介绍 3 1.4三自由度机器人目前存在问题 4 1.5三自由度机器人的力控制问题 4 1.6三自由度机器人的发展趋势 5 第2章 总体技术方案及系统组成 7 2.…

[附源码]SSM计算机毕业设计电子病历信息管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

AVL的单旋和双旋—附图超详细

文章目录前言&#xff1a;AVL 的插入寻找插入位置更新平衡因子调整AVL右旋左旋左右双旋右左双旋完整代码前言&#xff1a; 我们知道二叉排序树的搜索效率很高&#xff0c;能达到(logn)的时间复杂度&#xff0c;但是当元素有序导致二叉搜索树变成了一个长条&#xff08;图左&am…

游戏优化之空间划分

使用的动机 定义&#xff1a;将对象根据它们的位置存储在数据结构中&#xff0c;来高效地定位对象。 在游戏中&#xff0c;AI向最近的敌人攻击是很常见的&#xff0c;但如果有很多单位的话&#xff0c;他们AI需要频繁的查找单位&#xff0c;然后在检测是不是距离最近的单位&a…

Git工具使用全解

Git工具使用全解 文章目录Git工具使用全解1.企业开发中的版本控制器2.Git工具的使用场景3.Git工具操作流程(三板斧操作)4.Git工具的安装与常用命令4.1 Git的安装4.2 Git基本操作指令5.Git工具常见问题解决5.1 常见问题&#xff1a;分支冲突解决办法5.2 常见问题&#xff1a;合并…

Linux | 动静态库 | 动静态链接 | makefile库打包 | 第三方库使用

文章目录何为动静态库库文件的链接静态链接静态库打包动态链接动态库打包第三方库的使用静态库的使用动态库的使用在系统层面上的动态链接理解何为动静态库 静态库(.a)&#xff1a;在程序编译链接时将静态库二进制码拷贝到程序代码中&#xff0c;程序运行时不再需要外部的静态库…