【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-server
  cloud:
    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-gateway
  cloud:
    config:
      uri: http://localhost:7600
      label: dev
      profile: 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文件即可,把全部选项都写在这里,效果基本是一致的,在不考虑上面的加载顺序覆盖的问题上。

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

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

相关文章

selenium web 网页测试自动化需要哪些技术?

引言&#xff1a; 在当今互联网时代&#xff0c;网页测试自动化成为了确保软件质量和提高效率的重要手段之一。Selenium是一种功能强大且广泛应用的工具&#xff0c;可用于实现网页测试自动化。本文将带您了解Selenium Web网页测试自动化所需的技术和步骤&#xff0c;以便您从零…

伦敦银和现货白银是一回事吗

伦敦银和现货白银不能直接完全地画上等号&#xff0c;但如果投资者所指指的是国际市场上的现货白银交易&#xff0c;那么二者应该是等同的——因为在国际贵金属投资市场上&#xff0c;现货白银的别称就是伦敦银&#xff0c;伦敦银和现货白银指的其实是同一回事。 因为早在很多个…

MySQL学习——连接服务器和输入查询

MySQL是一个流行的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典的MySQL AB公司开发&#xff0c;后来被Oracle公司收购。它使用SQL&#xff08;结构化查询语言&#xff09;作为访问和操作数据库的标准语言。 要查看 mysql 客户端程序提供的选项列表&a…

firebase如何自定义上传日志

我们可以很轻松的得到2个代码&#xff1a; Firebase.crashlytics.log(str) Firebase.crashlytics.recordException(ex)这就是firebase提供的自定义日志和excption上传的方法。 但是如果你认为log函数调用后&#xff0c;直接就能查看到日志就错了。 我们在这个page是找不到日志…

Ableton Live 11 Suite for Mac:音乐创作的全能伙伴

在数字音乐创作的广阔天地中&#xff0c;Ableton Live 11 Suite for Mac无疑是一颗璀璨的明星。作为一款专业的音乐制作软件&#xff0c;它集合了音频录制、编辑、混音、母带制作等全方位功能&#xff0c;为Mac用户提供了无与伦比的音乐创作体验。 Ableton Live 11 Suite拥有直…

隆道出席河南ClO社区十周年庆典,助推采购和供应链数字化发展

5月26日&#xff0c;“河南ClO社区十周年庆典”活动在郑州举办&#xff0c;北京隆道网络科技有限公司总裁助理姚锐出席本次活动&#xff0c;并发表主题演讲《数字化采购与供应链&#xff1a;隆道的探索与实践》&#xff0c;分享隆道公司在采购和供应链数字化转型方面的研究成果…

【赠书第25期】C#项目开发实战(微视频版)

文章目录 前言 1 项目构思与需求分析 1.1 项目构思 1.2 需求分析 2 系统设计 2.1 系统架构设计 2.2 数据库设计 2.3 接口设计 3 编码实现 3.1 环境搭建 3.2 编码规范 3.3 编码实现 4 测试与部署 4.1 单元测试 4.2 系统测试 4.3 部署与上线 5 总结与展望 6 推…

图像分割模型LViT-- (Language meets Vision Transformer)

参考&#xff1a;LViT&#xff1a;语言与视觉Transformer在医学图像分割-CSDN博客 背景 标注成本过高而无法获得足够高质量标记数据医学文本注释被纳入以弥补图像数据的质量缺陷半监督学习&#xff1a;引导生成质量提高的伪标签医学图像中不同区域之间的边界往往是模糊的&…

SAP 没有项目类别表存在(表 T184L LF LEIH CHSP)

在项目上&#xff0c;客户在废品出库的时候&#xff0c;出现这个报错 查了相关资料&#xff0c;是因为后台确少配置&#xff1a;IMG-后勤执行-装运-交货-在交货时定义项目类别确定

Strust2 远程代码执行漏洞[s2-005]

漏洞复现环境搭建请参考 http://t.csdnimg.cn/rZ34p kali切换jdk版本请参考 Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客 漏洞原理 Strust2会将http的每个参数名解析成为OGNL语句执行&#xff0c;OGNL表达式通过#来访问Struts的对象&#xff0c;并且通过过…

MySQL实战行转列(或称为PIVOT)实战sales的表记录了不同产品在不同月份的销售情况,进行输出

有一个sales的表&#xff0c;它记录了不同产品在不同月份的销售情况&#xff1a; productJanuaryFebruaryMarchProduct AJanuary10Product AFebruary20Product BJanuary5Product BFebruary15Product CJanuary8Product CFebruary12 客户需求展示为如下的样子&#xff1a; pro…

智能客服:论小红书商家杀出重围的正确姿势!

小红书「起飞」密码 洞悉需求&#xff0c;主动应变 面对众多的互联网平台&#xff0c;选择一个合适的平台宣传自家的品牌&#xff0c;也是一门学问&#xff0c;从“遇事不决&#xff0c;小红书”&#xff0c;这一 slogan 就能精准地捕捉了用户搜索行为的新趋势。 在过去的十…

【机器学习】基于tensorflow实现你的第一个DNN网络

博客导读&#xff1a; 《AI—工程篇》 AI智能体研发之路-工程篇&#xff08;一&#xff09;&#xff1a;Docker助力AI智能体开发提效 AI智能体研发之路-工程篇&#xff08;二&#xff09;&#xff1a;Dify智能体开发平台一键部署 AI智能体研发之路-工程篇&#xff08;三&am…

Facebook:社交世界的接口

在当今数字时代&#xff0c;社交媒体已经成为了人们生活中不可或缺的一部分&#xff0c;而Facebook作为其中的巨头之一&#xff0c;扮演着至关重要的角色。本文将带您深入探索Facebook这张社交世界的画卷&#xff0c;全面了解这个令人着迷的平台。 起源与历程 Facebook的故事始…

揭开神秘的“位移主题”面纱 no.16

Kafka中神秘的内部主题&#xff08;Internal Topic&#xff09;__consumer_offsets。 consumer_offsets在Kafka源码中有个更为正式的名字&#xff0c;叫*位移主题*&#xff0c;即Offsets Topic。为了方便今天的讨论&#xff0c;我将统一使用位移主题来指代consumer_offsets。需…

机器视觉分析在加油站安全中的应用:使用手机检测、打电话行为识别

在加油站等高危场所&#xff0c;禁止使用手机是为了防止潜在的火灾和爆炸风险。手机在使用过程中可能产生电火花&#xff0c;而在加油站这种易燃易爆环境中&#xff0c;任何电火花都可能引发严重的安全事故。因此&#xff0c;加油站禁止使用手机是保障安全生产的重要措施。基于…

如何让Google快速收录?

要让Google快速收录你的网站&#xff0c;可以考虑使用GSI服务&#xff0c;这是一种专门设计来加速网站被Google搜索引擎收录的服务&#xff0c;下面详细解释GSI服务的基本原理和具体好处&#xff1a; GSI服务通过一种名为GPC爬虫池的系统实现&#xff0c;这个系统是基于对Goog…

SQL注入攻击是什么?如何预防?

一、SQL注入攻击是什么&#xff1f; SQL注入攻击是一种利用Web应用程序中的安全漏洞&#xff0c;将恶意的SQL代码插入到数据库查询中的攻击方式。攻击者通过在Web应用程序的输入字段中插入恶意的SQL代码&#xff0c;然后在后台的数据库服务器上解析执行这些代码&#xff0c;从而…

对比方案:5款知识中台工具的优缺点详解

知识中台工具为企业和组织高效地组织、存储和分享知识&#xff0c;还能提升团队协作的效率。在选择搭建知识中台的工具时&#xff0c;了解工具的优缺点&#xff0c;有助于企业做出最佳决策。本文LookLook同学将对五款搭建知识中台的工具进行优缺点的简单介绍&#xff0c;帮助企…

单细胞分析(Signac): PBMC scATAC-seq 基因组区域可视化

引言 在本教学指南中&#xff0c;我们将探讨由10x Genomics公司提供的人类外周血单核细胞&#xff08;PBMCs&#xff09;的单细胞ATAC-seq数据集。 加载包 首先加载 Signac、Seurat 和我们将用于分析人类数据的其他一些包。 if (!requireNamespace("EnsDb.Hsapiens.v75&qu…