【Spring Cloud】分布式配置

目录

  • 未来的开发场景
  • 为什么需要配置中心
    • 配置实时生效
    • 配置管理流程
  • 开源配置中心基本介绍
    • Disconf
    • Spring Cloud Config
    • Apollo
    • Nacos
  • Spring Cloud Config
    • 介绍
    • 配置管理工具
    • 体系
  • 案例
    • 需求
    • 编写 Config Server
      • 1.创建配置文件
      • 2.创建项目
      • 3.添加依赖
      • 4.添加注解
      • 5.修改配置文件
        • application.yml
        • 映射规则解析
      • 6.启动服务
      • 7.访问端点
      • 8.为Config Client准备配置环境
    • 编写 Config Client
      • 1.给demo-gateway项目添加依赖
      • 2.创建配置文件
        • bootstrap.yml
        • application.yml
      • 3.获取配置
      • 4.验证测试
  • 加密解密
    • 开启加密
      • 启动Config Server
      • 添加配置
      • 验证
    • 发送加密请求
    • 发送解密请求
    • 存储和解析加密数据
      • 1.添加配置
      • 2.代码解析加密
  • 思维导图
  • 补充:bootstrap.yml和application.yml的区别
        • 加载顺序
        • 配置区别
        • 典型的应用场景如下:
        • 为何需要把 config server 的信息放在 bootstrap.yml 里?

未来的开发场景

我们在创建项目的时候,为每个项目都配置了一个或者多个配置文件。通过修改配置文件中的参数我们可以创建出不同的服务环境。

  • 首先,服务拆分越多,配置项也就越多。而一旦有某项服务进行了调整,其他服务也需要相应调整。如果配置项都在每个项目的配置文件中配置,那么可想而知,只要一有改变,就得改配置文件,重新部署项目。

    • 比如:假如说3个微服务中关于数据库的配置项是完全一样的,倘若某天MySQL数据库迁移了,那么这3个微服务的配置文件也要全部修改;
  • 当修改了配置之后,必须重启服务,否则配置无法生效;

  • 其次,运维安全。如果我们将一些数据库信息直接配置在配置文件中,那么对于运维的同学来说,显然带来了更大的挑战与风险。因为项目极有可能是多人协作开发,而多人都可以直接连接数据库将会具有不小的风险(删库跑路了解一下)

为什么需要配置中心

配置实时生效

  • 传统的静态配置方式要想修改某个配置只能修改之后重新发布应用,要实现动态性,可以选择使用数据库,通过定时轮询访问数据库来感知配置的变化。轮询频率低感知配置变化的延时就长,轮询频率高,感知配置变化的延时就短,但比较损耗性能,需要在实时性和性能之间做折中。
  • 配置中心专门针对这个业务场景,兼顾实时性和一致性来管理动态配置。

配置管理流程

配置的权限管控、灰度发布、版本管理、格式检验和安全配置等一系列的配置管理相关的特性也是配置中心不可获取的一部分。

开源配置中心基本介绍

Disconf

2014年7月百度开源的配置管理中心,同样具备配置的管理能力,不过目前已经不维护了,最近的一次提交是两年前了。

Spring Cloud Config

2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。

Apollo

2016年5月,携程开源的配置管理中心,具备规范的权限、流程治理等特性。

Nacos

2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。

Spring Cloud Config

介绍

  • 2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。

  • Spring Cloud Config 是一个解决分布式系统的配置管理方案的项目。它包含了 Client 和 Server 两个部分,Server 端提供配置文件的存储、以接口的形式将配置文件的内容提供出去,Client 端通过接口获取数据、并依据此数据初始化自己的应用。

  • Spring Cloud Config 是一个基于 http 协议的远程配置实现方式,通过统一的配置管理服务器进行配置管理,客户端通过 https 协议主动的拉取服务的的配置信息,完成配置获取

  • 分布式环境中,很多的服务都是集群部署,那就意味着这些集群部署的服务都需要相同的配置文件。所以,这时候就引入了 Spring Cloud Config 这个组件,使用该组件来进行众多的配置文件的统一管理。

配置管理工具

  • 本地存储
  • Subversion
  • Git

体系

  1. Config Server
  2. Config Client

在这里插入图片描述在这里插入图片描述

案例

需求

  • 在Git仓库中创建分支
  • 在指定分支下创建文件夹
  • 在第2步创建文件夹下创建配置文件
  • 在配置文件中填充配置数据信息
  • 通过Config Server获取线上Git仓库中的配置信息
  • 通过Config Client从Config Server获取配置信息

编写 Config Server

1.创建配置文件

  • 在码云/GitEE中创建项目env-project

  • 在env-project项目中创建dev分支

  • 在dev分支下创建config-file文件夹

  • 在config-file下创建文件client-dev.properties

  • 在client-dev.properties填入以下内容

    eureka.port=19015
    spring.dataSource.username=root
    

    在这里插入图片描述

2.创建项目

指定artifactId为demo-config-server

3.添加依赖

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

4.添加注解

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

5.修改配置文件

application.yml
server:port: 7600
spring:application:name: demo-config-servercloud:config:server:git:uri: https://gitee.com/xxxxxx/env_project.git # 刚才创建的gitee位置search-paths: config-file
eureka:client:service-url:defaultZone: http:192.168.2.220:7776/eureka
映射规则解析
  • /client/dev/dev,即:/{application}/{profile}/{label}
    • {application}:Git仓库中文件名的前缀, 通常使用微服务名称
    • {profile}:{application}-后面的数值
      • 在同一个分支下可以有多个{application}名称相同的文件
    • {label}:Git仓库的分支名,默认为master

在这里插入图片描述

6.启动服务

7.访问端点

访问:http://localhost:7900/client/dev/dev,确保能够读取到gitee上的内容

8.为Config Client准备配置环境

在gitee上刚才的仓库的dev分支下创建配置文件:demo-gateway-dev.properties,内容如下:

eureka.port=18080

编写 Config Client

1.给demo-gateway项目添加依赖

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

2.创建配置文件

bootstrap.yml

在demo-gateway项目中创建文件 bootstrap.yml,内容如下:

spring:application:name: demo-gatewaycloud:config:uri: http://localhost:7600label: devprofile: dev
eureka:client:service-url:defaultZone: http://192.168.2.220:7776/eureka

这里为什么{profile}和{label}都指定了,不用指定{application},因为sprng.application.name就是{application}

application.yml
server:port: 7900

3.获取配置

@RestController
public class InfoController {@Value("${eureka.port}")private String port;@GetMapping("/port")public String getPort(){return "配置文件中的端口为:"+this.port;}
}

4.验证测试

访问地址:http://localhost:8085/port

加密解密

  • 数据在配置文件中明文保存,有安全隐患
  • 数据存储加密,使用时解密
    • Spring Cloud Config
    • JCE
      • JRE中自带
      • 默认有长度限制
      • 可以安装不限制长度版本

开启加密

启动Config Server

访问路径:

  • /encrypt/status:查看加密功能状态的端点
  • /key:查看密钥的端点
  • /encrypt:对请求的Body内容进行加密的端点
  • /decrypt:对请求的Body内容进行解密的端点

添加配置

在bootstrap.yml中添加密钥配置

encrypt:key: demo

验证

访问:http://localhost:7900/encrypt/status

发送加密请求

  • 请求地址:http://localhost:7900/encrypt
  • POST请求
    需加密的内容通过请求体发送
    在这里插入图片描述

发送解密请求

  • 请求地址:http://localhost:7900/decrypt
  • POST请求
  • 密文通过请求体发送
    在这里插入图片描述

存储和解析加密数据

1.添加配置

  • 在demo-gateway-dev.properties中添加加密后的配置
eureka.port={cipher} bfa028c0a382074d58bb315b00f5ffde4660d7e92977fe223cac2f9e430b1a9c
  • {cipher}代表当前数据为加密值

  • 配置文件如果是yml文件,tokenValidation的值必须加单引号,如果是properties文件,则不能有单引号,否则不能正常解析

  • 即使是相同的值,每次加密后的结果也可能不一样,以实际加密结果为准

2.代码解析加密

在demo-gateway项目解析加密数据

@RestController
public class InfoController {@Value("${eureka.port}")private String port;@GetMapping("/port")public String getPort() {return "配置文件中的端口为:" + this.port;}
}

思维导图

在这里插入图片描述

补充:bootstrap.yml和application.yml的区别

大家都知道,SpringBoot默认支持properties(.properties)和YAML(.yml .yaml )两种格式的配置文件。

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

  2. bootstrap.yml 用于应用程序上下文的引导阶段。bootstrap.yml 由父Spring ApplicationContext加载。

  3. 父ApplicationContext 被加载到使用 application.yml 的之前。

如果resource里面同时有application.properties 和 application.yml,且存在相同的配置,则application.properties会覆盖application.yml里面的属性,因为application.properties 会后加载,也就是说哪个文件被最后加载,哪个才具有最高级。(application会覆盖bootstrap中的非引导配置)

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

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

  3. application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等.如果加载的application.yml的内容标签与bootstrap的标签一致,application会覆盖bootstrap, 而application.yml 里面的内容可以动态替换。

典型的应用场景如下:
  1. 当使用 Spring Cloud Config Server 的时候,你应该在 bootstrap.yml 里面指定 spring.application.name 和 spring.cloud.config.server.git.uri
  2. 和一些加密/解密的信息
为何需要把 config server 的信息放在 bootstrap.yml 里?
  • 当使用 Spring Cloud 的时候,配置信息一般是从 config server 加载的,为了取得配置信息(比如密码等),你需要一些提早的或引导配置。因此,把 config server 信息放在 bootstrap.yml,用来加载真正需要的配置信息。

  • 当然,在一些情况上不用那么区分这两个文件,你只需要使用application文件即可,把全部选项都写在这里,效果基本是一致的,在不考虑上面的加载顺序覆盖的问题上。

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

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

相关文章

Python OCR 文字识别使用模型:读光-文字识别-行识别模型-中英-通用领域

介绍 什么是OCR&#xff1f; OCR是“Optical Character Recognition”的缩写&#xff0c;中文意为“光学字符识别”。它是一种技术&#xff0c;可以识别和转换打印在纸张或图像上的文字和字符为机器可处理的格式&#xff0c;如计算机文本文件。通过使用OCR技术&#xff0c;可…

在iPhone上恢复误删除的微信聊天记录

想知道是否可以恢复 微信iPhone 上误删除的消息&#xff1f;继续阅读以获取所有相关问题的答案。 过去几年&#xff0c;像微信这样的社交媒体应用为我们的生活增添了不少乐趣。它们让我们可以随时随地与朋友和家人保持联系。 微信是一个简化且热门的通信平台&#xff0c;它允…

数据结构 | 详解二叉树——堆与堆排序

&#x1f95d;堆 堆总是一棵完全二叉树。 大堆&#xff1a;父节点总是大于子节点。 小堆&#xff1a;父节点总是小于子节点。 注意&#xff1a;1.同一个节点下的两个子节点并无要求先后顺序。 2.堆可以是无序的。 &#x1f349;堆的实现 &#x1f334;深度剖析 1.父节点和子…

QT截图程序,可多屏幕截图二,增加调整截图区域功能

上一篇QT截图程序&#xff0c;可多屏幕截图只是实现了最基本的截图功能&#xff0c;虽然能用但是缺点也有&#xff0c;没办法更改选中的区域&#xff0c;这在实际使用时不太方便。这篇增加了这个功能。先看看效果。 实现代码为&#xff1a; 头文件 #ifndef MASKWIDGET_H #de…

Matlab|基于PMU相量测量单元进行电力系统电压幅值和相角状态估计

主要内容 程序采用三种方法对14节点和30节点电力系统状态进行评估&#xff1a; ①PMU同步相量测量单元结合加权最小二乘法&#xff08;WLS&#xff09;分析电力系统的电压幅值和相角状态&#xff1b; ②并采用牛顿-拉夫逊方法进行系统潮流计算&#xff0c;结果作为理论分…

LLAMA3==shenzhi-wang/Llama3-8B-Chinese-Chat。windows安装不使用ollama

创建环境&#xff1a; conda create -n llama3_env python3.10 conda activate llama3_env conda install pytorch torchvision torchaudio cudatoolkit11.7 -c pytorch 安装Hugging Face的Transformers库&#xff1a; pip install transformers sentencepiece 下载模型 ht…

开源一个工厂常用的LIMS系统

Senaite是一款强大且可靠的基于Web的LIMS/LIS系统&#xff0c;采用Python编写&#xff0c;构建在Plone CMS基础架构之上。该系统处于积极开发阶段&#xff0c;在灵活的定制空间中为开发人员提供了丰富的功能。其中&#xff0c;Senaite在处理REST的JSON API上做得出色&#xff0…

【Linux】Socket中的心跳机制(心跳包)

Socket中的心跳机制(心跳包) 1. 什么是心跳机制&#xff1f;(心跳包) 在客户端和服务端长时间没有相互发送数据的情况下&#xff0c;我们需要一种机制来判断连接是否依然存在。直接发送任何数据包可以实现这一点&#xff0c;但为了效率和简洁&#xff0c;通常发送一个空包&am…

vs工程添加自定义宏

一、简介 用户可以添加自定义宏变量方便工程路径名称的修改和配置 例&#xff1a;$(SolutionDir) 为解决方案路径&#xff0c;$(PojectDir) 为工程所在路径 测试环境&#xff1a;vs2017&#xff0c;qt5.14.0 二、配置 1、打开属性窗口&#xff1a;视图-》其他窗口-》属性管…

蓝桥杯-AB路线(详细原创)

问题描述&#xff1a; 有一个由 N M 个方格组成的迷宫&#xff0c;每个方格写有一个字母 A 或者 B。小蓝站在迷宫左上角的方格&#xff0c;目标是走到右下角的方格。他每一步可以移动到上下左右相邻的方格去。 由于特殊的原因&#xff0c;小蓝的路线必须先走 K 个 A 格子、再…

Spring OAuth2:开发者的安全盾牌!(下)

上文我们教了大家如何像海盗一样寻找宝藏&#xff0c;一步步解锁令牌的奥秘&#xff0c;今天将把更加核心的技巧带给大家一起学习&#xff0c;共同进步&#xff01; 文章目录 6. 客户端凭证与密码模式6.1 客户端凭证模式应用适用于后端服务间通信 6.2 密码模式考量直接传递用户…

【微机原理及接口技术】可编程计数器/定时器8253

【微机原理及接口技术】可编程计数器/定时器8253 文章目录 【微机原理及接口技术】可编程计数器/定时器8253前言一、8253的内部结构和引脚二、8253的工作方式三、8253的编程总结 前言 本篇文章就8253芯片展开&#xff0c;详细介绍8253的内部结构和引脚&#xff0c;8253的工作方…

人工智能初识

&#x1f31e;欢迎来到人工智能基础的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年5月1…

618手把手教你捡漏服务器

618最全捡漏攻略 捡漏规则1、新人优惠⭐⭐⭐2、教育优惠⭐⭐3、回馈活动⭐️ ECS价格对比新人优惠&#x1f49d;京东云 50/年百度云 60.69/年阿里云 82/年腾讯云 99/年 回馈活动&#x1f381;阿里云 教育优惠&#x1f3eb;阿里云腾讯云 hi&#xff0c;好久不见各位&#xff0c;…

16 -java反射

目录 第16章 反射 16.1 反射的概念 16.2反射的作用 16.3 java.lang.Class类 16.3.1 哪些类型可以获取Class对象 16.3.2 获取Class对象的四种方式 16.4 反射的基本应用 16.4.1 获取类型的详细信息 16.4.2 创建任意引用类型的对象 16.4.3 操作任意类型的属性 16.4.4 调…

【JS基础知识07】函数

一&#xff1a;函数是什么以及函数作用 1 函数是什么 函数是经过封装、调用后&#xff0c;能够完成特定任务的代码块 2 函数的作用 仅需“函数名(实参)”就可以调用函数&#xff0c;起到精简代码&#xff0c;提高开发效率的作用 二&#xff1a;函数使用 1 语法规则&#…

光耦的工作原理

一、光电耦合器简介 光电耦合器主要是一种围绕光作为媒介的光电转换元器件&#xff0c;能够实现光到电、电到光之间的自由转换。我们又可以称之为光电隔离器&#xff0c;之所以这么称呼&#xff0c;主要是因为光电耦合器能够很好的对电路中的电信号起到隔离的作用。有效的保护…

如何使用 .htaccess 删除文件扩展名

本周有一个客户&#xff0c;购买Hostease的虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何使用 .htaccess 删除文件扩展名&#xff1f;我们为用户提供相关教程&#xff0c;用户很快解决了遇到的问题。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以对您有…

如何在中国网上发布文章

随着互联网的迅猛发展&#xff0c;网上发布文章已经成为一种重要的传播方式。而在中国&#xff0c;作为世界上最大的互联网市场&#xff0c;如何在中国网上发布文章成为了许多人关注的焦点。媒介多多网发稿平台作为一个专业的发稿平台&#xff0c;为广大作者提供了很好的发布文…

计算机系统基础实验三(解了但尽量理解)

一.准备阶段 1、下载好32位的实验代码后&#xff0c;将文件解压缩并且通过共享文件夹操作将文件添加到虚拟机中&#xff0c;双击查看bomb.c代码&#xff0c;将c代码完整看了一遍&#xff0c;发现看这里的c代码是无从下手的&#xff0c;代码中只含有主函数&#xff0c;触发炸弹…