SpringCloud之Spring Cloud Config 分布式配置

news2024/11/22 22:08:17

Spring Cloud Config 分布式配置

    • 1. 分布式系统面临的配置文件问题
    • 2. Spring Cloud Config 分布式配置中心的概念
    • 3. Spring Cloud Config 分布式配置中心的作用
    • 4. Spring Cloud Config 分布式配置中心和 GitHub 整合
    • 5. 小案例

Dalston.RELEASE

Spring Cloud Config 分布式系统中的外部配置提供服务器和客户端支持。使用 Config Server,你可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与 Spring EnvironmentPropertySource 抽象相同,因此它们与 Spring应用程序非常契合,但可以与任何以任何语言运行的引用程序一起使用。随着应用程序通过从开发人员到测试和生产的部署流程,你可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。服务存储后端的默认实现使用 git ,因此它轻松支持标签版本的配置环境,一级可以访问用于管理内容的各种工具。很容易添加替代实现,并使用 Spring 配置将其插入。
在这里插入图片描述

1. 分布式系统面临的配置文件问题


微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务,由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。Spring Cloud 提供了 Config Server 来解决这个问题,我们每一个微服务自己带着一个 application.yml,那上百个的配置文件修改起来,令人头疼!

2. Spring Cloud Config 分布式配置中心的概念


在这里插入图片描述
Spring Cloud Config 为微服务架构中的微服务提供集中化的外部支持,配置服务器为各个不同微服务应用的所有环节提供一个中心化的外部配置

Spring Cloud Config 分为服务端客户端两部分。

  • 服务端
    服务端也成为分布式配置中心,它是一个独立的微服务应用,用来来凝结配置服务器并为客户端提供获取配置信息、加密、解密信息等访问接口。

  • 客户端
    客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息。配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理。并且可用通过git客户端工具来方便的管理和访问配置内容。

3. Spring Cloud Config 分布式配置中心的作用


  • 集中式管理配置文件
  • 不同环境,不同配置,动态化的配置更新,分环境部署,比如/dev /test /prod /beta /release
  • 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
  • 当配置发生变动时,服务不需要重启,即可感知到配置的变化,并应用新的配置
  • 将配置信息以REST接口的形式暴露

4. Spring Cloud Config 分布式配置中心和 GitHub 整合


由于 Spring Cloud Config 默认使用 git 来存储配置文件(也有其他方式,比如自持SVN和本地文件),但是最推荐的还是 git ,而且使用的是 http/https 访问的形式。

案例
1、新建springcloud-config-server-3344模块,导入依赖

<dependencies>
    <!--web-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--config-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    <!--eureka-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
        <version>1.4.6.RELEASE</version>
    </dependency>
</dependencies>

2、resource下创建application.yml配置文件,Spring Cloud Config 服务器从git存储库(必须提供)为远程客户端提供配置:

server:
  port: 3344

spring:
  application:
    name: springcloud-config-server
  # 连接码云远程仓库
  cloud:
    config:
      server:
        git:
          # 注意是https的而不是ssh
          uri: https://gitee.com/cao_shi_peng/springcloud-config.git 
            # 通过 config-server可以连接到git,访问其中的资源以及配置~

# 不加这个配置会报Cannot execute request on any known server 这个错:连接Eureka服务端地址不对
# 或者直接注释掉eureka依赖 这里暂时用不到eureka
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

3、主启动类

@EnableConfigServer // 开启spring cloud config server服务
@SpringBootApplication
public class Config_server_3344 {
    public static void main(String[] args) {
        SpringApplication.run(Config_server_3344.class,args);
    }
}

将本地git仓库springcloud-config文件夹下的新建的application.yml提交到码云仓库:

在这里插入图片描述

定位资源的默认策略时克隆一个git仓库(在spring.cloud.config.server.git.uri),并使用它来初始化一个迷你SpringApplicaiton。小应用程序的Evironment用于枚举属性源并通过JSON端点发布。

HTTP服务具有以下格式的资源:

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

其中"应用程序"作为SpringApplication中的spring.config.name注入(即常规的 Spring Boot 引用程序中通常是"应用程序"),“配置文件”是活动配置文件(或逗号分隔列表的属性),“label”是可选的git标签(默认为“master”)。

测试访问 http://localhost:3344/application-dev.yml
在这里插入图片描述

测试访问 http://localhost:3344/application/test/master

在这里插入图片描述
测试访问 http://localhost:3344/master/application-dev.yml
在这里插入图片描述

如果测试访问不存在的配置则不显示 如:http://localhost:3344/master/application-aaa.yml

在这里插入图片描述

客户端
将本地git仓库springcloud-config文件夹下新建的config-client.yml提交到码云仓库:
在这里插入图片描述
新建一个springcloud-config-client-3355模块,并导入依赖

<!--config-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-start -->
<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>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

resources下创建application.yml和bootstrap.yml配置文件

bootstrap.yml 是系统级别的配置

# 系统级别的配置
spring:
  cloud:
    config:
      name: config-client # 需要从git上读取的资源名称,不要后缀
      profile: dev
      label: master
      uri: http://localhost:3344

application.yml 是用户级别的配置

# 用户级别的配置
spring:
  application:
    name: springcloud-config-client

在 controller 包下的 ConfigClientController.java 用于测试

@RestController
public class ConfigClientController {

    @Value("${spring.application.name}")
    private String applicationName; //获取微服务名称

    @Value("${eureka.client.service-url.defaultZone}")
    private String eurekaServer; //获取Eureka服务

    @Value("${server.port}")
    private String port; //获取服务端的端口号


    @RequestMapping("/config")
    public String getConfig(){
        return "applicationName:"+applicationName +
         "eurekaServer:"+eurekaServer +
         "port:"+port;
    }
}

主启动类

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

测试:
启动服务端 Config_server_3344 再启动客户端ConfigClent

访问:http://localhost:8201/config/

在这里插入图片描述

5. 小案例


本地新建 config-dept.yml 和 config-eureka.yml 并提交到码云仓库
在这里插入图片描述
在这里插入图片描述

新建springcloud-config-eureka-7001模块,并将原来的springcloud-eureka-7001模块下的内容拷贝到该模块。

  1. 清空该模块的application.yml配置,并新建bootstrap.yml连接远程配置

    spring:
      cloud:
        config:
          name: config-eureka # 仓库中的配置文件名称
          label: master
          profile: dev
          uri: http://localhost:3344
    
  2. 再pom.xml中添加spring cloud config 依赖

    	<!--config-->
    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
        <version>2.1.1.RELEASE</version>
    </dependency>
    
  3. 主启动类

    @SpringBootApplication
    @EnableEurekaServer //EnableEurekaServer 服务端的启动类,可以接受别人注册进来~
    public class ConfigEurekaServer_7001 {
        public static void main(String[] args) {
            SpringApplication.run(ConfigEurekaServer_7001.class,args);
        }
    }
    
  4. 测试
    第一步:启动 Config_Server_3344,并访问http://localhost:3344/master/config-eureka-dev.yml 测试
    在这里插入图片描述
    第二步:启动ConfigEurekaServer_7001,访问 http://localhost:7001/ 测试
    在这里插入图片描述

    新建springcloud-config-dept-8001模块并拷贝springcloud-provider-dept-8001的内容

    同理导入spring cloud config依赖、清空application.yml 、新建bootstrap.yml配置文件并配置

    spring:
      cloud:
        config:
          name: config-dept
          label: master
          profile: dev
          uri: http://localhost:3344
    

    主启动类

    @SpringBootApplication
    @EnableEurekaClient //在服务启动后自动注册到Eureka中!
    @EnableDiscoveryClient //服务发现~
    @EnableCircuitBreaker //
    public class ConfigDeptProvider_8001 {
        public static void main(String[] args) {
            SpringApplication.run(ConfigDeptProvider_8001.class,args);
        }
    
        //增加一个 Servlet
        @Bean
        public ServletRegistrationBean hystrixMetricsStreamServlet(){
            ServletRegistrationBean registrationBean = new ServletRegistrationBean(new HystrixMetricsStreamServlet());
            registrationBean.addUrlMappings("/actuator/hystrix.stream");
            return registrationBean;
        }
    }
    

    测试 (略)

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

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

相关文章

Web3中文|Web3注定会成为元宇宙的一部分

“Web3”和“元宇宙”或许是2022年最热门的流行语了。在营销行话中、在广告中、在新闻报道中&#xff0c;Web3和元宇宙这两个概念总是被捆绑在一起。 但不得不说&#xff0c;二者经常被混为一谈是有原因的。因为它们都是定义模糊的新技术&#xff0c;都被认为是互联网的未来&a…

20230112在Ubuntu下看笔记本电脑电池的电量

20230112在Ubuntu下看笔记本电脑电池的电量 2023/1/12 17:24 ubuntu20.04 Xshell 7 (Build 0108) Copyright (c) 2020 NetSarang Computer, Inc. All rights reserved. Type help to learn how to use Xshell prompt. [C:\~]$ Connecting to 192.168.186.228:22... Connecti…

知物由学 | 多级建模方法提升汉语语音识别效果,获ISCSLP大赛认可

导读&#xff1a;语音是人类信息沟通的重要途径&#xff0c;同时也是人机交互的重要桥梁&#xff0c;自动语音识别可以表述为通过计算机将人类语音信号转录为书面形式的文字输出的过程。本文分享了网易易盾提出的多级建模单元的端到端汉语语音识别方法及具体的落地实践。 1.语…

什么是虹科weeve边缘计算软件平台?

一、前言 随着越来越多的企业希望进入物联网领域&#xff0c;他们在构建和部署物联网项目时面临着前所未有的挑战。根据思科的一项调查表明&#xff0c;超过60&#xff05;的受访者承认他们严重低估了管理自己的物联网计划的复杂性。更令人震惊的是&#xff0c;同一调查还发现…

MongoDB副本集搭建和读写分离配置

MongoDB副本集&#xff08;Replication Set&#xff09;由一组mongod实例(进程)组成&#xff0c;包含一个Primary节点和多个Secondary节点.客户端数据写入Primary节点。Secondary节点从Primary节点同步数据。以保持副本集内所有成员存储相同的数据集。Primary节点故障时会自动选…

C++ 居然超过了 Python?

很难想象&#xff0c;从 1983 年被正式命名开始算起&#xff0c;已经走过整整四十年光阴的 C&#xff0c;居然力挫 C、Python&#xff0c;摘得了 TIOBE 2022 年度编程语言的桂冠。据 TIOBE 官网显示&#xff0c;在过去一年里&#xff0c;C 因为涨幅最大&#xff0c;为 4.62%&am…

论文投稿指南——中文核心期刊推荐(海洋学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

javaWeb大体了解

Web&#xff1a;全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站 JavaWeb&#xff1a; 是用 Java技术来解决相关web互联网领域的技术栈。 JavaWeb 技术栈 B/S 架构&#xff1a; Browser/Server&#xff0c;浏览器/服务器 架构模式&#xff0…

读书笔记-《ON JAVA 中文版》-摘要10[第十一章 内部类]

文章目录1. 创建内部类2. 链接外部类3. 使用 .this 和 .new4. 内部类与向上转型5. 内部类方法和作用域6. 匿名内部类7. 嵌套类7.1 嵌套类7.2 接口内部的类7.3 从多层嵌套类中访问外部类的成员8. 为什么需要内部类8.1 为什么需要内部类8.2 闭包与回调8.3 内部类与控制框架9. 继承…

智慧农业远程监控系统解决方案

我国是一个农业大国&#xff0c;农作物种植在全国范围内都非常广泛&#xff0c;农作物病虫害防治工作的好坏、及时与否对于农作物的产量、质量影响至关重要。因种植面积广&#xff0c;分布不均&#xff0c;农业工作人员不能够做到在灾害发生时及时出现在现场&#xff0c;所以农…

【Linux】理解缓冲区

文章目录一.引入二.认识缓冲区1.为什么2.刷新策略3.在哪里三、理解缓冲区一.引入 我们发现 printf 和 fwrite &#xff08;库函数&#xff09;都输出了2次&#xff0c;而 write 只输出了一次&#xff08;系统调用&#xff09;。为什么呢&#xff1f;肯定和fork有关&#xff01;…

C++职工管理系统,eof()函数,选择排序

目录 1.创建管理类 1.1头文件实现&#xff0c;在workerManager.h中设计管理类 1.2源文件实现&#xff0c;在workerManager.cpp中将构造和析构函数的空实现补全 2.菜单功能 2.1在管理类workerManager.h中添加菜单成员函数 2.2在管理类workerManager.cpp中写实现 3.退出功能 …

Pycharm基础安装教程:搭建python环境+安装pycharm

嗨害大家好鸭&#xff01;我是小熊猫~ 之前有的小伙伴总说小熊猫发的内容不够基础… 这次小熊猫就来给大家做一个简单的安装介绍吧~ 这里给大家准备了社区版pycharm2021.2 &#xff08;最新版部分库不稳定&#xff0c;不建议下载&#xff09; 第一次安装的小伙伴实在不会下载…

【JavaSE系列】第十节 —— 带你吃透抽象类

&#xff08;6&#xff09;当一个抽象类 继承一个抽象类的时候&#xff0c;可以不用来重写 当作父类的那个抽象类的抽象方法&#xff1a;提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、抽象类的概念 二、…

二叉苹果树 【树形dp(背包)】

来源&#xff1a;牛客网 题目链接&#xff1a;https://ac.nowcoder.com/acm/contest/25022/1006 题目描述 有一棵二叉苹果树&#xff0c;如果数字有分叉&#xff0c;一定是分两叉&#xff0c;即没有只有一个儿子的节点。这棵树共N个节点&#xff0c;标号1至N&#xff0c;树根编…

rollup.js配置环境变量

场景: 由于项目是通过svelte.js rollup.js框架搭建起来的, 并没有使用到cli脚手架, 没有办法配置不同环境的变量一. 使用cross-env添加环境变量安装cross-env&#xff0c;它可根据不同的系统设置环境变量npm install cross-env --save-dev在 package.json 中&#xff1a;"…

MongoDB索引

介绍 增加查询效率&#xff0c;不必每次都全表扫描单字段索引&#xff1a;在用户单个字段上创建升序/降序索引复合索引&#xff1a;在多个字段上添加索引&#xff1b;如{name:1, age:-1}&#xff0c;关注field顺序其他索引&#xff1a;地理空间索引&#xff0c;文本索引&#x…

浙大MBA复试经验和真题分享——知己知彼胜率更高

前段时间跟朋友吃饭的时候&#xff0c;问我在浙大读MBA是什么体验&#xff1f;其实说实话&#xff0c;当时选择浙大&#xff0c;主要还是为了学历&#xff0c;觉得自己一个普通的二本学历真的平平无奇&#xff0c;公司里面新进的员工虽然年纪轻&#xff0c;但学历却很有来头&am…

PySpark任务提交spark-submit参数设置一文详解

目录 前言 一、PySpark集群运行原理 二、spark-submit参数详解 1.指定运行目录 2.--deploy-mode 3.--master 4.驱动程序和执行器资源 5.--files和--verbose 6.Spark提交配置 三.PySpark程序提交配置选项 1.构建一套虚拟环境 2. 模块依赖问题原因 参阅 前言 之前我们已…

MySQL 笔记

文章目录安装MySQL 语法格式MySQL数据类型命令操作数据库CRUD查询创建表删除表修改表操作数据增改删查基础查询条件查询模糊查询排序查询分组查询分页查询聚合函数约束约束分类安装 软件安装&#xff5c;macOS下超详细的MySQL安装 MySQL 语法格式 每条语句以分号;结尾&#…