当前位置: 首页 > news >正文

Spring Cloud Config: 了解、原理和使用

Spring Cloud Config: 了解、原理和使用

Spring Cloud Config 是 Spring Cloud 生态系统中的一个重要组件,它提供了一种分布式配置管理的解决方案,能够集中管理应用程序的配置,支持多种后端存储,如 Git、SVN、本地文件系统、Vault 等。在本文中,我们将介绍 Spring Cloud Config 的概念、原理和使用方法,并提供一些代码示例。

在这里插入图片描述

了解 Spring Cloud Config

Spring Cloud Config 通过将应用程序配置集中管理,使得应用程序的配置更加易于管理和维护。它通过将配置存储在远程仓库中(如 Git),并提供 REST API 来访问配置,从而实现了分布式配置管理。Spring Cloud Config 还支持配置的版本管理,可以根据不同的环境、不同的应用程序等来管理配置,从而实现了应用程序的多环境部署。

Spring Cloud Config 有两个核心组件:

  • Config Server:配置服务器,用于存储和管理应用程序的配置。
  • Config Client:配置客户端,用于从 Config Server 中获取配置。

Spring Cloud Config 的原理

Spring Cloud Config 的核心原理是将应用程序的配置存储在远程仓库中,并将其作为一个 REST API 来访问。Config Server 会自动从远程仓库中获取配置,然后将其返回给 Config Client。Config Client 可以通过 HTTP 或 HTTPS 协议来访问 Config Server,并获取应用程序的配置。

Spring Cloud Config 支持多种仓库类型,如 Git、SVN、本地文件系统、Vault 等。其中,Git 是最常用的仓库类型。在使用 Git 作为配置仓库时,Config Server 会自动从 Git 仓库中获取配置文件,并将其转换为一个 REST API 来访问。配置文件的命名规则是 a p p l i c a t i o n − {application}- application{profile}.yml 或 a p p l i c a t i o n − {application}- application{profile}.properties,其中 a p p l i c a t i o n 是应用程序的名称, {application} 是应用程序的名称, application是应用程序的名称,{profile} 是应用程序的环境。

如何使用 Spring Cloud Config

下面我们来介绍如何使用 Spring Cloud Config 来管理应用程序的配置。

创建 Config Server

首先,我们需要创建一个 Config Server,用于存储和管理应用程序的配置。可以使用 Spring Boot 来创建 Config Server,只需要添加以下依赖:

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

然后,在应用程序的启动类上添加 @EnableConfigServer 注解,即可启动 Config Server:

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

默认情况下,Config Server 会从 Git 仓库中获取配置文件。可以通过在 application.yml 文件中添加以下配置来指定 Git 仓库的位置:

spring:cloud:config:server:git:uri: https://github.com/spring-cloud-samples/config-repo.git

创建 Config Client

接下来,我们需要创建一个 Config Client,用于从 Config Server 中获取应用程序的配置。可以使用 Spring Boot 来创建 Config Client,只需要添加以下依赖:

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

然后,在应用程序的启动类上添加 @EnableConfigrationProperties 注解,即可启动 Config Client:

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

默认情况下,Config Client 会从 Config Server 中获取应用程序的配置。可以通过在 application.yml 文件中添加以下配置来指定 Config Server 的位置:

spring:cloud:config:uri: http://localhost:8888

获取配置

现在,我们已经创建了 Config Server 和 Config Client,下面我们来看看如何从 Config Server 中获取应用程序的配置。

我们可以通过在 application.yml 文件中添加以下配置来指定应用程序的名称和环境:

spring:application:name: myappprofiles:active: dev

这里,我们将应用程序的名称设置为 myapp,环境设置为 dev。然后,在 Config Server 中创建一个名为 myapp-dev.properties 的配置文件,内容如下:

foo=bar

接下来,在 Config Client 中可以通过 @Value 注解来获取配置:

@RestController
public class ConfigController {@Value("${foo}")private String foo;@GetMapping("/foo")public String getFoo() {return foo;}
}

这样,当访问 /foo 接口时,就可以获取到配置中的 foo 属性了。

配置加解密

在实际使用中,我们可能需要对配置进行加解密,以保证配置的安全性。Spring Cloud Config 支持配置加解密,可以使用 Jasypt 来实现。

首先,我们需要在 Config Server 和 Config Client 中添加以下依赖:

<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId>
</dependency>

然后,在 Config Server 中,可以通过在 application.yml 文件中添加以下配置来指定加解密密钥:

jasypt:encryptor:password: mysecretkey

然后,在 Config Server 中创建加密的配置文件,可以使用 Jasypt 命令行工具来加密:

java -cp jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="foo=bar" password=mysecretkey algorithm=PBEWithMD5AndDES

将加密后的结果保存为 myapp-dev.properties.encrypted 文件。然后,在 Config Client 中,可以通过在 application.yml 文件中添加以下配置来指定解密密钥:

jasypt:encryptor:password: mysecretkey

然后,在 Config Client 中可以直接获取解密后的配置:

@RestController
public class ConfigController {@Value("${foo}")private String foo;@GetMapping("/foo")public String getFoo() {return foo;}
}

这样,当访问 /foo 接口时,就可以获取到解密后的配置中的 foo 属性了。

总结

Spring Cloud Config 是 Spring Cloud 生态系统中的一个重要组件,它提供了一种分布式配置管理的解决方案,能够集中管理应用程序的配置,支持多种后端存储,如 Git、SVN、本地文件系统、Vault 等。在本文中,我们介绍了 Spring Cloud Config 的概念、原理和使用方法,并提供了一些代码示例。希望本文对于了解和使用 Spring Cloud Config 有所帮助。

相关文章:

Spring Cloud Config: 了解、原理和使用

Spring Cloud Config: 了解、原理和使用 Spring Cloud Config 是 Spring Cloud 生态系统中的一个重要组件&#xff0c;它提供了一种分布式配置管理的解决方案&#xff0c;能够集中管理应用程序的配置&#xff0c;支持多种后端存储&#xff0c;如 Git、SVN、本地文件系统、Vaul…...

基于图的路径规划算法对比

基于图的路径规划算法对比 算法说明与实现效果构造路网1.打开Arcmap2.新建Shapefile文件3.编辑Shapefile属性4.开始编辑5.创建要素并绘制路网6.打断相交线7.保存编辑8.打开图层属性表9.添加字段10.完成字段添加11.计算字段id12.计算点线字段13.选中length字段14.计算length字段…...

SQL Server 索引

1、索引的概念 假设数据库中现在有2万条记录&#xff0c;现在要执行这样一个查询&#xff1a;SELECT * FROM table where num10000。如果没有索引&#xff0c;必须遍历整个表&#xff0c;直到num等于10000的这一行被找到为止&#xff1b;如果在num列上创建索引&#xff0c;SQL …...

java抽奖

目录 一、简要描述 二、代码 一、简要描述 此抽奖方式为&#xff1a;在1~30个数字之间 挑选7个不重复的数字输入&#xff0c;系统会根据中奖的号码与用户输入的号码进行比较&#xff0c;系统会输出是否中奖的提示&#xff01; 二、代码 import java.util.Scanner; import ja…...

【springboot+云计算】B/S医院信息管理系统源码(云HIS)

一、基于云计算技术的B/S架构的医院管理系统(简称云HIS) 采用前后端分离架构&#xff0c;前端由Angular框架、JavaScript语言开发&#xff1b;后端使用Java语言开发。系统遵循服务化、模块化原则开发&#xff0c;具有强大的可扩展性&#xff0c;二次开发方便快捷。为医疗机构提…...

go 读写 excel 读取 txt 繁体中文转码

读取txt&#xff0c;繁体中文转码 package mainimport ("bufio""fmt""golang.org/x/text/encoding/traditionalchinese""os" )func readTxtTest() {txtPath : C:\Users\admin\Desktop\contact.txtfile, err : os.Open(txtPath)if err…...

docker网卡的IP地址修改

1. 安装docker 请参考 Linux系统在线安装docker任意版本完整教程 2. dockers启动一个容器查看容器ip docker run -d --name nginx -p 80:80 nginx #启动一个容器 docker ps -a #查看容器正常运行 docker inspect --format {{ .NetworkSettings.IPAddress }} nginx ##查看…...

python与深度学习——基础环境搭建

一、安装jupyter notebook Jupyter Notebook是一个开源的交互式笔记本环境&#xff0c;可以用于编写和执行代码、创建可视化效果、展示数据分析结果等。我们在这里用它实现代码运行和观察运行结果。安装jupyter notebook实质上是安装Anaconda,后续还要在Anaconda Prompt中使用c…...

Django实现简单的音乐播放器 2

在《Django实现简单的音乐播放器 1》前期准备的基础上开始开发。 效果&#xff1a; 目录 项目视图 创建视图方法 路由加载视图 加载模板 创建首页html文件 加载静态资源文件 加载静态文件 使用方法 启动服务器 加载数据表 创建表模型 生成表迁移 执行创建表 插入…...

OpenCV 入门教程:图像读取和显示

OpenCV 入门教程&#xff1a;图像读取和显示 导语一、图像读取1.1、导入 OpenCV 库1.2、读取图像文件1.3、图像读取的返回值 二、图像显示2.1、创建窗口2.2、图像显示2.3、等待按键2.4、关闭窗口 三、示例应用总结 导语 在计算机视觉和图像处理领域&#xff0c;读取和显示图像…...

什么是GPT?

文章目录 1、什么是GPT&#xff1f;2、gpt版本时间线3、我们能用GPT做什么&#xff1f;4、如何快速体验GPT&#xff1f;5、作为一名开发者&#xff0c;如何在代码中使用GPT&#xff1f;6、如何在现有项目中使用和部署GPT&#xff1f;7、GPT的优缺点&#xff1f;8、对于人工智能…...

如何通过浏览器配置哪些网页不走代理服务器,Lantern开启后部分网页打不开了

浏览器点设置 > 搜索“代理” > “打开计算机的代理设置” > 编辑“使用代理服务器” 搜索“代理” > “打开计算机的代理设置” > 编辑“使用代理服务器”&#xff0c;将不用代理的url链接域名写进来&#xff0c;点击保存。然后刷新打不开的网页&#xff0c;…...

Redis常见面试题

什么是Redis持久化&#xff1f;Redis有哪几种持久化方式&#xff1f;优缺点是什么 把redis内存中的数据持久化到磁盘的过程就是redis持久化。RDB:快照存储&#xff0c;每隔一段时间对redis内存中的数据进程快照存储。优点:恢复数据快 缺点:数据完整性差 AOF:日志追加 把每个写…...

应用零信任原则:案例研究和现场经验教训

随着云架构、软件即服务和分布式劳动力日益成为当今现代组织的主导现实&#xff0c;零信任安全模型已成为首选安全范例。 因此&#xff0c;描述零信任安全原则以及构成零信任架构 (ZTA) 的组件的出版物和资源数量几乎令人瘫痪。该行业缺乏的是一个多样化的示例库&#xff0c;可…...

RabbitMQ系列(14)--Topics交换机的简介与实现

1、Topics交换机的介绍 Topics交换机能让消息只发送往绑定了指定routingkey的队列中去&#xff0c;不同于Direct交换机的是&#xff0c;Topics能把一个消息往多个不同的队列发送&#xff1b;Topics交换机的routingkey不能随意写&#xff0c;必须是一个单词列表&#xff0c;并以…...

解决PyInstaller打包selenium脚本时弹出driver终端窗口

解决PyInstaller打包selenium脚本时弹出driver终端窗口 找到service.py C:\Users\XXX\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\common\service.py添加creationflags 在第77行添加: creationflags134217728使用PyInstaller打包 pyinstaller -F -w -…...

基于卷积神经网络VGG的猫狗识别

&#xff01;有需要本项目的实验源码的可以私信博主&#xff01; 摘要&#xff1a;随着大数据时代的到来&#xff0c;深度学习、数据挖掘、图像处理等已经成为了一个热门研究方向。深度学习是一个复杂的机器学习算法&#xff0c;在语音和图像识别方面取得的效果&#xff0c;远远…...

mysql查询语句练习总结(涵盖所有sql语法)

最近在学习SQL嘛,所以各个地方找题目来练手,毕竟现在能离得开数据库么? Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题&#xff1a; 1、查询“001”课程比“002”课程成绩高的所有学生的学号&#x…...

TypeScript 中 any、unknown、never 和 void 有什么区别?

一 unknown: 未知类型 unknown: 未知类型是typescript 3.0 中引入的新类型。 1.1 所有类型的字面量都可以分配给unknown类型 unknown未知类型&#xff0c;代表变量类型未知&#xff0c;也就是可能为任意类型&#xff0c;所以&#xff0c; 所有类型的字面量都可以分配给unkno…...

算法Day60 | 84.柱状图中最大的矩形,刷题总结

Day60 84.柱状图中最大的矩形刷题总结 84.柱状图中最大的矩形 题目链接&#xff1a;84.柱状图中最大的矩形 遍历每个元素&#xff0c;找到左右元素小于当前元素的&#xff0c;以左右元素间的区间&#xff08;左开右开区间&#xff09;所围成的面积中的最大值。 数组尾部加一个…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...