十六、Config分布式配置中心

news2024/11/27 10:22:11

目录

分布式配置中心概述

1、为什么需要分布式配置中心?

2、配置中心的作用:

Spring Cloud Config简介

 新建项目springcloud-config-server

1、引入配置中心config-server的依赖

2、在github/gitee上新建一个远程仓库作为config的远程配置中心

3、添加application.yml文件

4、添加启动类,在启动类上添加注解@EnableConfigServer

5、验证配置中心服务项目是否搭建成功

 新建项目springcloud-config-client

1、引入config-client依赖

2、添加bootstrap.yml配置文件

3、添加启动类

4、添加Controller获取配置信息

5、启动config-client、config-server,将服务注册到统一个注册中心

6、配置无需重启获得修改后的配置信息

6.1、添加依赖

6.2、修改bootstrap.yml配置内容,添加如下内容

6.3、Controller类上加@RefreshScope注解

6.4、使用postman手动发送一个post请求,主动刷新client端项目

6.5、手动刷新client端项目后,重新访问localhost:9022/getConfig即可看到更新后的配置信息


分布式配置中心概述

1、为什么需要分布式配置中心?

1.1、配置文件无法统一管理,如数据库连接、redis连接、第三方账号信息等等

1.2、无法实时更新

2、配置中心的作用:

2.1统一管理配置信息

使用配置中心管理各个项目的配置信息,而不需要写到每个项目的jar包的resource里,这样修改项目的配置更加方便,否则如果每个项目各自维护自己的配置信息,那么在项目很多的情况下,维护配置信息将是一件令人奔溃的事情

2.2一处修改处处更新

     修改完后,会在项目中自动更新配置信息,而不需要去每台服务器上重启服务

Spring Cloud Config简介

配置中心为了方便服务配置文件的统一管理,实时更新,所以需要分布式配置中心组件,它就是Spring Cloud Config。它支持配置信息放在配置服务的内存中(即本地),也支持放在远程git仓库。在Spring Cloud Config中分为三个角色,一是远程仓库,二是config server,三是config client。

  1. 远程仓库:负责存储配置文件信息
  2. Config server:负责拉取远程仓库上的配置文件信息
  3. Config client:负责从config server读取配置信息

架构图如下:

 新建项目springcloud-config-server

1、引入配置中心config-server的依赖

<!--config server配置中心依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

2、在github/gitee上新建一个远程仓库作为config的远程配置中心

如:https://gitee.com/xxx/configuration.git

3、添加application.yml文件

server:
  port: 9021

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          #git的仓库地址
          uri:  https://gitee.com/xxx/configuration.git
          #文件路径
          search-paths: config
          #username
          #password
#如果仓库是公开仓库,则可以不配置用户名和密码
eureka:
  instance:
    # 使用ip地址作为host,而不是机器号/电脑名称
    prefer-ip-address: true
    #    Eureka客户端向注册中心发送心跳的时间间隔是1s,默认是30s
    lease-renewal-interval-in-seconds: 1
    #    Eureka服务端在收到一次心跳后等待时间上限是2s,默认是90s
    #    超时将剔出该微服务,也可以在Eureka服务端进行设置
    lease-expiration-duration-in-seconds: 2
  client:
    service-url:
      defaultZone: http://localhost:8060/eureka/

4、添加启动类,在启动类上添加注解@EnableConfigServer

@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer//表示配置中心的服务端
public class ConfigApp {
    public static void main( String[] args ) {
        SpringApplication.run(ConfigApp.class,args);
    }
}

5、验证配置中心服务项目是否搭建成功

启动springcloud-config-server后,访问:http://localhost:9021/application-dev.yml

http://localhost:9021/application-test.yml 

前提是对应的git仓库上有对应的文件

springcloud config的url与配置文件的映射关系如下:

/{application}/{profile}[/{label}]

读取yaml文件

/{application}-{profile}.yml  #常用

/{label}/{application}-{profile}.yml #常用

读取properties文件

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties

其中label表示分支,不写默认从master分支上读取数据

 

 可以看到已经config-server搭建成功,从远程仓库拿到了对应的配置文件信息

 新建项目springcloud-config-client

1、引入config-client依赖

<!-- 引入config-client依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

2、添加bootstrap.yml配置文件

server:
  port: 9022

spring:
  application:
    name: config-client
  cloud:
    config:
      #分支,默认master
      label: master
      #配置文件名称
      name: application
      #文件名后缀(application-dev.yml)
      profile: dev
      discovery:
        #开启从注册中心获取服务
        enabled: true
        #指定配置中心的服务名称
        service-id: config-server


eureka:
  instance:
    # 使用ip地址作为host,而不是机器号/电脑名称
    prefer-ip-address: true
    #    Eureka客户端向注册中心发送心跳的时间间隔是1s,默认是30s
    lease-renewal-interval-in-seconds: 1
    #    Eureka服务端在收到一次心跳后等待时间上限是2s,默认是90s
    #    超时将剔出该微服务,也可以在Eureka服务端进行设置
    lease-expiration-duration-in-seconds: 2
  client:
    service-url:
      defaultZone: http://localhost:8060/eureka/

配置yml时,注意,config-client中需要用的是bootstrap.yml,bootstrap.yml优先级要对于application.yml

因为bootstrap(系统级)在容器一启动时就会去加载,而application(应用级)在容器启动过程中加载。由于我们需要在容器启动时就去拉取config-server里的配置信息,所以当前的配置文件优先级要更高。

3、添加启动类

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

4、添加Controller获取配置信息

@RestController
public class ConfigController {
    
    @Value("${config.name}")
    private  String config;

    @Value("${server.port}")
    private  String port;

    @GetMapping("/getConfig")
    public String getConfig(){
        return "content:" + config + ",port:" + port;
    }
}

config.name是配置在远程仓库的内容

5、启动config-client、config-server,将服务注册到统一个注册中心

访问localhost:9022/getConfig

 

 可以看到远程仓库的内容已经被读取出来了

6、配置无需重启获得修改后的配置信息

但是此时在git上修改config.name的内容后,手动刷新/getConfig接口,数据并没有发生变化(未重启config-client),如果不想重启服务就让修改的配置信息生效,此时需要对config-client项目进行改造

6.1、添加依赖

<!--引入spring监控组件-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

6.2、修改bootstrap.yml配置内容,添加如下内容

#暴露监控端点
management:
  endpoints:
     web:
       exposure:
         include: "*"

6.3、Controller类上加@RefreshScope注解

@RestController
@RefreshScope
public class ConfigController {

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

    @Value("${server.port}")
    private  String port;

    @GetMapping("/getConfig")
    public String getConfig(){
        return "content:" + config + ",port:" + port;
    }
}

6.4、使用postman手动发送一个post请求,主动刷新client端项目

http://localhost:9022/actuator/refresh

6.5、手动刷新client端项目后,重新访问localhost:9022/getConfig即可看到更新后的配置信息

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

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

相关文章

3年测试技术面一题都看不懂,字节面试真的变态.....

最近我的一个读者朋友去了字节面试&#xff0c;来给我发信息吐槽&#xff0c;说字节的面试太困难了&#xff0c;像他这种三年经验的测试员&#xff0c;在技术面&#xff0c;居然一题都答不上来&#xff0c;这要多高的水平才能有资格去面试字节的测试岗位。 确实&#xff0c;字…

Vue2+CSS实现一个瀑布流布局案例

在练习代码的时候&#xff0c;看到了携程的首页下方的布局还挺好看 就是一个瀑布流的布局效果&#xff0c;在携程上是一共两列布局&#xff0c;然后每个格子的高度都会根据图片的高度做排布 一开始是想使用flex进行布局&#xff0c;先让每个格子各占百分之49&#xff0c;然后贴…

微信小程序实现电子书搜索与下载

1、背景 自己已经做了一版电子书下载网站&#xff08;走蛟电子书&#xff09;&#xff0c;但用户使用手机更方便些&#xff0c;为改善用户体验&#xff0c;准备做一款微信小程序实现电子书搜索与下载的功能。 2、技术栈 由于功能较为单一&#xff0c;因此前端使用原生的微信…

CSS基础语法

CSS基础语法知识 文章目录 CSS基础语法1. CSS的引入方式1.1 内部样式1.2 外部样式1.3 内联样式 2. CSS标签选择器2.1 标签选择器2.2 类选择器2.3 id选择器2.4 复合选择器 3. CSS常见属性3.1 字体相关3.2 文本相关3.3 颜色的写法3.4 背景相关3.5 边框相关3.6 元素的显示模式3.7 …

【链表应用】| 一元多项式的操作

目录 一. &#x1f981; 要求:二. 代码实现&#xff08;Java & c&#xff09;1. Java实现2.C语言实现 三. &#x1f981; 总结 一. &#x1f981; 要求: 设有两个一元多项式: p(x)p0p1xp2x2pnxn q(x)q0q1xq2x2qmxm 多项式项的系数为实数&#xff0c;指数为整数&#xff0c…

11个免费的数据可视化工具推荐

数据可视化之所以流行&#xff0c;不仅是因为它简化了我们查看复杂数据的方式&#xff0c;更是因为数据可视化可以加快我们获取数据信息的速度。 本文专门为您列出了11个免费的数据可视化工具&#xff0c;帮助您快速掌握数据可视化技能。 1.即时设计 即时设计是可云端编辑的…

物通博联工业物联网解决方案,助力工厂实现设备远程运维

各类设备制造工厂随着经营规模与业务的扩张&#xff0c;设备可以销往全国各地甚至是全球&#xff0c;是工厂实力的体现。当设备越来越多、分布越来越广&#xff0c;设备管理的工作量和成本直线上升&#xff0c;可能面对维护不及时的情况&#xff0c;影响到客户经济效益和对工厂…

spark源码 spark on yarn环境的创建

1.入口类 sparkSubmit 的main方法 提交application submitnew SparkSubmit submit.doSubmit(args) -> super.doSubmit(args): parseArguments(args) &#xff1a;参数解析 方法 中 new sparkSubmitArguments(args) 点进去该类(主要解析参数)&#xff0c;然后找到parse&am…

C/C++ 内存管理 new delete operator new与operator delete函数 内存泄漏

C/C 内存分布 在C/C 当中有 &#xff1a; 局部数据静态数据和全局数据常量数据动态申请数据 上述不同的数据存储的位置也不同&#xff0c;&#xff1a; 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长的。2. 内存映射段是高效的I/O映射方式&…

Java运算符详解

目录 &#x1f511;前言 &#x1f3bd;算式运算符 ⚙赋值运算符 &#x1f34a;关系运算符 &#x1f37a;逻辑运算符 &#x1f352;位运算符 &#x1f339;移位运算符 &#x1f343;条件运算符 &#x1f349;运算符优先级 &#x1f511;前言 任何一个程序都离不开计算问题&…

IOC/DI配置管理第三方bean(Druid/C3P0)

文章目录 1 案例:数据源对象管理1.1 环境准备1.2 思路分析1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序 1.4 实现C3P0管理步骤1:导入C3P0的依赖步骤2:配置第三方bean步骤3:运行程序 2 加载properties文件2.1…

详解MySQL的并发控制

目录 1.概述 2.事务 2.1.什么是事务 2.2.事务的隔离级别 2.2.1.三种数据一致性问题 2.2.2.四种隔离级别 2.3.如何设置隔离级别 3.锁 3.1.锁与事务的关系 3.2.分类 3.3.表锁 3.3.1.概述 3.3.2.读锁 3.3.3.写锁 3.3.4.保护机制 3.4.行锁 3.4.1.概述 3.4.2.什么…

Redis Java API操作

1、普通maven工程方式 Redis不仅可以通过命令行进行操作&#xff0c;也可以通过JavaAPI操作&#xff0c;通过使用Java API来对Redis数据库中的各种数据类型操作 导入POM依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http…

【Linux Network】传输层协议——UDP

目录 传输层 端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) netstat pidof UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 UDP详解&#x1f337; 传输层 在TCP/IP协议中可以把网络简单的划分为四个部分&#…

大数据如何助力营销(3)产品定位

在市场竞争日益激烈的环境下&#xff0c;产品定位是企业成功的关键因素之一。产品定位是指根据目标市场和目标消费者的需求、偏好和期望&#xff0c;确定产品的特性、功能、形象和价值&#xff0c;并与竞争对手的产品进行差异化的过程。产品定位不仅影响产品的设计、开发、生产…

全面讲解涂鸦PaaS2.0开发平台!物联网干货预警

之前我们有介绍过涂鸦 IoT PaaS&#xff08;点击查看往期介绍&#xff09;&#xff0c;面向开发生态&#xff0c;它集成了云开发、App 开发、硬件开发三大核心支撑能力&#xff0c;能够全方位助力开发者打造极具竞争力的个性化 IoT 解决方案&#xff0c;极大地降低 IoT 开发门槛…

Appium APP自动化环境搭建

1.下载安装 F:\android-sdk-windows F:\Appium-windows-1.21.0 F:\nodejs 2.创建一个bat文件&#xff0c;命名为appium.bat&#xff0c;并在其中写入如下内容&#xff1a; node Appium安装目录\resources\app\node_modules\appium\build\lib\main.js %* 注意&#xff1a;请…

从0到1开始,一步步搭建Web自动化测试框架

测试框架的设计有两种思路&#xff0c;一种是自底向上&#xff0c;从脚本逐步演变完善成框架&#xff0c;这种适合新手了解框架的演变过程。另一种则是自顶向下&#xff0c;直接设计框架结构和选取各种问题的解决方案&#xff0c;这种适合有较多框架事件经验的人。本章和下一张…

【zabbix】批量监控端口,自动发现规则

快速搞定端口批量监控 一、脚本及配置 1、&#xff08;文件名&#xff1a;check_port.py&#xff09;&#xff08;python2.7版本&#xff09; 存在路径&#xff1a;/etc/zabbix/zabbix_agentd.d/check_port.py 这个脚本有一部分内容是我从百度上找的&#xff0c;有一部分自己…

【C++】红黑树的实现

文章目录 &#x1f4d5; 概念特性 &#x1f4d5; 红黑树具体实现节点定义结构框架插入 &#x1f4d5; 概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个…