SpringCloud-Config:分布式配置

10. Spring Cloud Config 分布式配置

Dalston.RELEASE

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

概述

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

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

什么是SpringCloud config分布式配置中心?

在这里插入图片描述

spring cloud config 为微服务架构中的微服务提供集中化的外部支持,配置服务器为各个不同微服务应用的所有环节提供了一个中心化的外部配置

spring cloud config 分为服务端和客户端两部分。

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

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

spring cloud config 分布式配置中心能干嘛?

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

spring cloud config 分布式配置中心与GitHub整合

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

入门案例

服务端

1.新建git仓库,并拷贝到本地,新建application.yml文件

在这里插入图片描述

在application.yml里面配置开发环境的配置信息

在这里插入图片描述

并提交到git上

在这里插入图片描述

在这里插入图片描述

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

2.新建springcloud-config-server-3344模块导入pom.xml依赖

在这里插入图片描述

<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>

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

在这里插入图片描述

是https,不是git

server:
  port: 3344

spring:
  application:
    name: springcloud-config-server
  # 连接码云远程仓库
  cloud:
    config:
      server:
        git:
          # 注意是https的而不是ssh
          uri: https://gitee.com/LBJ/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

4.主启动类

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

5.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”)。

6.测试效果:

在这里插入图片描述

测试访问http://localhost:3344/application-dev.yml

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

客户端

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

在这里插入图片描述

在这里插入图片描述

2. 新建一个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>

3. 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

4. 创建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;
    }
}

5.主启动类

在这里插入图片描述

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

6.测试:

启动服务端Config_server_3344 再启动客户端ConfigClient

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

在这里插入图片描述

此时,没有在本地配置端口号,所以需要在运行台上,查看远程配置的端口号,再访问即可

在这里插入图片描述

因为读取远程的配置文件,激活的是dev环境
在这里插入图片描述

在这里插入图片描述

换成test环境再试一下

在这里插入图片描述

在这里插入图片描述

成功访问

在这里插入图片描述

实战

将之前的模块的本地配置都改为远程配置

1.本地新建config-dept.yml和config-eureka.yml并提交到码云仓库

①从7001集群的模块拷贝配置文件到config-eureka.yml文件中

在这里插入图片描述

在这里插入图片描述

②从8001集群的模块拷贝配置文件到config-dept.yml文件中

在这里插入图片描述

在这里插入图片描述

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

(1)在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>

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

在这里插入图片描述

spring:
  cloud:
    config:
      name: config-eureka # 仓库中的配置文件名称
      label: master
      profile: dev
      uri: http://localhost:3344

(3)application.yml配置个应用名称即可

在这里插入图片描述

(4)主启动类

在这里插入图片描述

@SpringBootApplication
@EnableEurekaServer //EnableEurekaServer 服务端的启动类,可以接受别人注册进来~
public class ConfigEurekaServer_7001 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigEurekaServer_7001.class,args);
    }
}

服务端直接连本地的客户端,所以不用加注解,服务端需要连接云端,所以需要加上注解

(5)测试:

此时访问的服务器是有本地配置文件的,先保证可以拿到远程的配置文件的信息

启动 Config_Server_3344,并访问 http://localhost:3344/master/config-eureka-dev.yml

在这里插入图片描述

启动ConfigEurekaServer_7001,访问 http://localhost:7001/ 测试

在这里插入图片描述

3.新建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

application.yml

在这里插入图片描述

启动测试:

在这里插入图片描述

在远程修改一下之前的配置文件,可以切换dev、test的开发环境

在这里插入图片描述

需要重新热部署一下,重新访问远程

在这里插入图片描述

成功切换环境,访问到不同数据库

在这里插入图片描述

至此,集群、客户端、服务提供者三方都不需要再一一编辑核心配置文件了,只需要读取远程的配置文件即可

SpringCloud-Config:分布式配置 到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电商云平台系统的设计与实现

随着电商市场的不断发展&#xff0c;越来越多的企业和个人选择通过电商平台开展业务。为了更好地满足电商市场的需求&#xff0c;一个高效、安全、可扩展的电商云平台系统是必不可少的。本文将介绍电商云平台系统的设计与实现。 1. 系统架构设计 电商云平台系统的架构设计主要…

SSTI模板注入漏洞(vulhub 复现)

首先了解模板引擎&#xff1a; 模板引擎&#xff08;这里特指用于Web开发的模板引擎&#xff09;是为了使用户界面与业务数据&#xff08;内容&#xff09;分离而产生的&#xff0c;它可以生成特定格式的文档&#xff0c;利用模板引擎来生成前端的html代码&#xff0c;模板引擎…

JS加密解密之JS广告漂浮代码分析

前言 之前有个客户要求帮忙复刻一份广告漂浮代码&#xff0c;我看了下&#xff0c;目标站的广告代码是通过了JS加密后的&#xff0c;经过我解密还原后分析了一下该代码的作用如下。 ;var _0xodDddd,_0xodD_[_0xodD],_0x1d02[_0xodD,\x73\x54\x69\x6d\x65,\x6c\x6f\x61\x64\x5…

Vue3 provide + inject

provide&#xff1a;提供一个值&#xff0c;可以在应用中的所有后代组件中注入使用。 官方文档&#xff1a;应用实例 API | Vue.js 应用实例 API | Vue.jsVue.js - 渐进式的 JavaScript 框架https://cn.vuejs.org/api/application.html#app-provide 使用示例 祖先组件 <…

『随处指挥』:用这款APP,世界听你的!

在这个科技日新月异的时代&#xff0c;我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机&#xff0c;你是否也有遇到过需要远程操作自己某一台手机的场景呢&#xff1f;今天&#xff0c;我要向大家推荐一款神奇的手机远程操作神器&#xff0c;让你可以随时随地…

【设计模式】4、策略模式

文章目录 一、问题二、解决方案2.1 真实世界的类比2.2 策略模式结构2.3 适用场景2.4 实现方式2.5 优缺点2.6 与其他模式的关系 三、示例代码3.1 go3.2 rust 策略模式是一种行为设计模式&#xff0c;它能定义一系列算法&#xff0c;把每种算法分别放入独立的类中&#xff0c;以是…

[Flask]SSTI1 buuctf

声明&#xff1a;本篇文章csdn要我一天发两篇所以我来水的 跟ssti注入的详细知识我这里写了 https://blog.csdn.net/weixin_74790320/article/details/136154130 上面链接我复现了vulhub的SSTI&#xff0c;其实本质上是一道题 然后我们就用{{.__class__}}看类的类型&#xf…

政安晨:【完全零基础】认知人工智能(三)【超级简单】的【机器学习神经网络】—— 三层神经网络示例

知识准备 咱们还没有演示过使用矩阵进行计算得到经由神经网络馈送的信号&#xff0c;我们也没有演示过多于2层的神经网络示例&#xff0c;在这篇文章里&#xff0c;咱们将构建一个三层神经网络的示例&#xff0c;并观察如何处理中间层的输出以作为最后第三层的输入&#xff0c…

百度智能云分布式数据库 GaiaDB-X 与龙芯平台完成兼容认证

近日&#xff0c;百度智能云的分布式关系型数据库软件 V3.0 与龙芯中科技术股份有限公司的龙芯 3C5000L/3C5000 处理器平台完成兼容性测试&#xff0c;功能与稳定性良好&#xff0c;获得了龙架构兼容互认证证书。 龙芯系列处理器 通用 CPU 处理器是信息产业的基础部件&#xf…

【CSS】设置文字(文本)的渐变色

# 渐变色 文字 第一步 设置渐变颜色 background: linear-gradient(278.83deg, #5022bd 31.42%, #8636d1 75.55%); // 先设置渐变色背景&#xff1b; 第二步 设置颜色的使用范围 background-clip: text; // 背景被裁剪成文字的前景色。 -webkit-background-clip: text; 第三步…

微前端(qiankun)vue3+vite

目录 一、什么是微前端 二、主应用接入 qiankun 1.按照qiankun插件 2.注册微应用引用 3.挂载容器 三、微应用接入 qiankun 1.vite.config.ts 2.main.ts ps&#xff1a;手动加载微应用方式 ps&#xff1a;为什么不用 iframe 一、什么是微前端 微前端是一种多个团队通过独…

MAC电脑系统清理空间免费版软件CleanMyMac X2024

大家好&#xff0c;我是那个总是被苹果电脑“内存已满”提示搞得焦头烂额的专业博主。如果你也像我一样&#xff0c;在使用Mac时经常遭遇卡顿、慢吞吞的情况&#xff0c;那么今天的Mac清理空间妙招分享绝对适合你&#xff01; CleanMyMac X全新版下载如下: https://wm.makedi…

为什么深度神经网络难以完全模拟人脑思维

由于深度神经网络基于线性函数和激活函数&#xff0c;不能完全模拟人脑思维&#xff0c;也许这是瓶颈。在人类思维中&#xff0c;我们能够处理模糊的概念&#xff0c;例如对于一只动物是否属于“狗”的判断&#xff0c;我们可以接受一定程度上的模糊性。但是在深度网络中&#…

IDEA2023.3.4开启SpringBoot项目的热部署【简单明了4步操作】

添加devtools依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional> </dependency>IDEA开启自动编译 …

PCB的介质损耗角是什么“∠”?

1、什么叫介质 介质是指在某种特定条件下能够传递力、能量或信息的物质或者空间。在物理学和工程学中&#xff0c;介质通常是指固体、液体或气体&#xff0c;它们能够传递机械波、电磁波等。例如&#xff0c;在声学中&#xff0c;空气、水和固体都可以作为声波的传播介质&…

使用vscode传入参数的方式进行debug

使用vscode传入参数的方式进行debug {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: https://go.microsoft.com/fwlink/?linkid830387"version": "0.2.0","configurations": [{&quo…

每日一练:LeeCode-501、二叉搜索树中的众数【二叉搜索树+pre辅助节点+DFS】

本文是力扣LeeCode-LeeCode-501、二叉搜索树中的众数【二叉搜索树pre辅助节点DFS】 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;…

概率基础——几何分布

概率基础——几何分布 介绍 在统计学中&#xff0c;几何分布是描述了在一系列独立同分布的伯努利试验中&#xff0c;第一次成功所需的试验次数的概率分布。在连续抛掷硬币的试验中&#xff0c;每次抛掷结果为正面向上的概率为 p p p&#xff0c;反面向上的概率为 1 − p 1-p …

2974. 最小数字游戏【简单】

2974. 最小数字游戏 题目描述&#xff1a; 你有一个下标从 0 开始、长度为 偶数 的整数数组 nums &#xff0c;同时还有一个空数组 arr 。Alice 和 Bob 决定玩一个游戏&#xff0c;游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下&#xff1a; 每一轮&#xf…

Graph + LLM图数据库技术如何助力行业大语言模型应用落地

随着 AI 人工智能技术的迅猛发展和自然语言处理领域的研究日益深入&#xff0c;如何构建强大的大语言模型对于企业来说愈发重要&#xff0c;尤其是在特定行业领域中。 图数据库作为处理复杂数据结构的有力工具&#xff0c;为企业构建行业大语言模型提供了强大的支持。本文将探…