【SpringCloud】之配置中心(进阶使用)

  🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《SpringCloud开发之远程消费》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁


前言

        在上一期的SpringCloud博客分享中我们学习到了SpringCloud中的远程消费是如何去实现的,以及其中的一些关键的知识点。在第一期的博客中我们学习了如何集成nacos的使用,但是只涉及到了其中的服务管理。本期博客带来的是nacos中的配置管理。

一、什么是配置管理

1. 简要概述

         在Spring Cloud中,配置管理是指一种机制,通过该机制,可以在分布式系统中集中管理和配置应用程序的配置信息。Spring Cloud提供了多个组件来支持配置管理,其中最核心的组件之一是Spring Cloud Config

        Spring Cloud Config允许你将应用程序的配置信息集中存储在一个中心化的位置,而不是散落在各个服务中。这个中心化的配置存储可以是Git仓库,也可以是其他后端存储,例如基于文件系统的存储、Vault、Consul等。通过Spring Cloud Config,你可以在需要时动态刷新应用程序的配置,而不需要重新启动应用。

2. 主要特性和概念

        以下是Spring Cloud Config的主要特性和概念:

Spring Cloud Config的主要特性和概念
特性及概念说明
配置存储库(Configuration Repository)应用程序的配置信息被存储在一个版本控制系统(通常是Git)中的一个特定存储库中。每个微服务都可以有一个或多个配置文件,包括不同的环境配置(如开发、测试、生产)。
配置客户端(Configuration Client)微服务通过Spring Cloud Config客户端访问配置服务器获取其配置信息。这些客户端可以是任何使用Spring框架的Java应用,不仅限于Spring Cloud应用。
配置服务器(Configuration Server)这是Spring Cloud Config的核心组件。配置服务器负责管理和提供应用程序的配置信息。它从配置存储库中获取配置文件,并通过HTTP或其他协议将配置信息提供给配置客户端。
动态刷新(Dynamic Refresh)Spring Cloud Config支持动态刷新配置,即在应用程序运行时更新配置,而无需重启应用。这对于实现配置的热更新和动态调整非常有用。

         总之,使用Spring Cloud Config,可以轻松地实现跨多个微服务的配置管理,并确保配置的一致性和集中管理。这对于分布式系统中的微服务架构非常重要,因为它允许在整个系统中轻松管理和修改配置,而无需逐个修改每个服务的配置文件。

3. 使用场景概述

         微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大 量的服务。 由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的。 Spring Cloud 提供了 ConfigServer来解决这个问题.

        Spring Cloud Config 为微服务架构中的微服务提供集中化的外部配置支持 , 配置服务器为各个不同微服务应用的所有环境提供了一个 中心化的外部配置
        pringCloud Config 分为 服务端和客户端 两部分。

图解一

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

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

 图解二

         一个使用微服务架构的应用系统可能会包括成百上千个微服务,配置各部相同,需求各不相同:

        不同环境不同配置:例如数据源在不同的环境(开发, 测试 , 生产)是不同的 , 可以通过配置中心 运行期间可以动态调整。例如根据各个微服务的负载状况, 动态调整数据源连接池大小或者熔断阀 值, 并且调整时不停止微服务(配置修改后可以自动更新)

图解三

二、实际使用运用

1. 导入配置中心的依赖

        我们将依赖导入到主项目的pom文件中,因为后续可能有很多服务需要配置

<!--引入配置中心的依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

2. 新建配置

        我们启动nacos服务,在网页中访问nacos管理网页

`         我们对其填写对应的信息

        最后我们点击发布即可。 

 

        上述的图片就是我们点击发布弹出的窗口 

3. 代码读取配置文件

3.1 创建bootstrap.yml文件

·        在生产者的resources的文件目录下创建一个bootstrap.yml文件

 

         创建的bootstrap.yml文件执行在application.yml之前的运行,但是我们创建之后但是还是不会生效的,需要我们导入一个依赖,我们放在主项目中。

<!--引入bootstrap.yml--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

 application与Bootstrap的区别

        SpringBoot默认支持properties和YAML两种格式的配置文件。
        bootstrap.yml(bootstrap.properties)用来程序引导时执行,应用于更加早期配置信息读取,如可以使 用来配置application.yml中使用到参数等
        application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用 的公共参数等。
        bootstrap.yml 先于 application.yml 加载

3.2 将application.yml文件内容复制到Bootstrap.yml文件中

        将application.yml文件内容复制到Bootstrap.yml文件中

server:port: 8080
spring:cloud:nacos:discovery:#        标注nacos地址server-addr: localhost:8848application:name: ${spring.application.name}server-addr: ${spring.cloud.nacos.discovery.server-addr}file-extension: yaml

         然后我们新建一个与之对应的配置文件。

4. 访问配置文件

        当我们启动程序访问配置文件的时候我们默认访问的是provider.yaml文件 ,因为哦们新建配置文件的时候是说有一个默认分组,所以文件中需要对应的配置

编写Controller类进行读取

方式一:
package com.yx.provider;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** com.yx.provider** @author 君易--鑨* @site www.yangxin.com* @company 木易* @create 2024/1/7*/
@RestController
@RequestMapping("/user")
@Slf4j
public class ConfigController {//        邮箱配置@Value("${email.account}")private String account;@Value("${email.password}")private String password;@RequestMapping("/test01")public String test01(){log.info("account:{},password:{}",account,password);return "木易";}}

         我们直接启动项目进行访问即可 

         由上图所示我们的生产者成功的获取配置中心对应的配置内容并且打印输出

方式二:

         为了方便我们获取配置内容中的信息,因此我们创建一个类用于获取

 EmailProperties.java
package com.yx.provider.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** com.yx.provider.config** @author 君易--鑨* @site www.yangxin.com* @company 木易* @create 2024/1/7**/
@Component
@ConfigurationProperties("email")
@Data
public class EmailProperties {//    定义属性private String account;private String password;
}

        我们光写了对应的配置类之后,还要在Controller中去引用它。

 

         我们重新启动项目访问该请求方法进行测试

三、公共配置

1. bootstrap.yml文件配置

server:port: 8080
spring:application:name: providercloud:nacos:discovery:server-addr: localhost:8848config:server-addr: ${spring.cloud.nacos.discovery.server-addr}prefix: ${spring.application.name}file-extension: yamlgroup:  DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP# 共享配置集数组shared-configs:
#          - 第一个配置文件- data-id: redis.yaml #名称group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUPrefresh: true # 是否自动刷新配置,默认为 false
#          - 有多个配置文件在后面进行配置

        根据你配置的信息创建对应的类进行接收

 

 2. controller类引入

         在controller类中进行对应的引入使用

3. 测试验证

        重启项目访问请求方法验证 

四、环境的设置

        我们的项目开发过程中分别有开发、测试、灰度、生产环境,对应的我们的配置每切换一个环境都要进入对应的配置中去修改,这样麻烦还容易出问题。因此我们在nacos的管理网页中的命名空间去新建我们对应需要的环境。

1. 创建命名空间 

 

2. 将配置文件克隆至指定的空间中

        在我们的配置列表中选择指定的配置文件,点击克隆选择对应的空间,最后点击开始克隆即可。

3. 对不同的环境进行修改

4. 指定命名空间

        在我们的Bootstrap.yml的文件中进行配置

        我们重新启动访问测试 

        我们将 namespace的值换成测试环境的id,再重新运行测试


 🎉🎉本期的博客分享到此结束🎉🎉

📚📚各位老铁慢慢消化📚📚

🎯🎯下期博客博主会带来新货🎯🎯

🎁三连加关注,阅读不迷路 !🎁

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

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

相关文章

精彩推荐 |【Java技术专题】「重塑技术功底」攻破Java技术盲点之剖析动态代理的实现原理和开发指南(上)

攻破Java技术盲点之剖析动态代理的实现原理和开发指南 背景介绍静态代理和动态代理动态代理与静态代理的区别 进入正题重温&#xff1a;静态代理实现静态代理案例静态代理的弊端 重温&#xff1a;动态代理Java动态代理InvocationHandlerJava动态代理的实现下面看具体的代码实例…

Blazor项目如何调用js文件

以下是来自千问的回答并加以整理&#xff1a;&#xff08;说一句&#xff0c;文心3.5所给的回答不完善&#xff0c;根本运行不起来&#xff0c;4.0等有钱了试试&#xff09; 在Blazor项目中引用JavaScript文件&#xff08;.js&#xff09;以实现与JavaScript的互操作&#xff…

基于JAVA的服装店库存管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

Java 11中的新字符串APIs详解

第1章 引言 大家好&#xff0c;我是小黑&#xff0c;咱们都知道&#xff0c;Java作为一种广泛使用的编程语言&#xff0c;每一次更新都会带来不少新鲜事物。而Java 11&#xff0c;作为长期支持&#xff08;LTS&#xff09;版本之一&#xff0c;更是引起了广大开发者的关注。好…

并发(8)

目录 46.Thread.sleep(),Object.wait(),Condition.await(),LockSupport.part()的区别&#xff1f; 47.如果在wait&#xff08;&#xff09;之前执行了notify&#xff08;&#xff09;会怎样&#xff1f; 48.如果在park()之前执行了unpark()会怎样&#xff1f; 49.什么是AQS&…

九州金榜|孩子厌学,作为父母有想做自己的原因吗?

孩子不会天生就厌学&#xff0c;如果孩子天生厌学&#xff0c;那么孩子就不可能学会说话&#xff0c;走路&#xff0c;日常生活&#xff0c;更不可能去上学&#xff0c;孩子厌学因素非常多&#xff0c;而作为父母&#xff0c;你有没有想过是你的原因造成的呢&#xff1f;九州金…

编程语言的未来,通用代码生成器和超级语言

编程语言的未来&#xff0c;通用代码生成器和超级语言 我们生活在一个编程语言种类繁多&#xff0c;百花齐放的年代。形形色色的编程语言覆盖了软件开发的方方面面。如果说这些变成语言有什么共性的话&#xff0c;大家都知道&#xff0c;大多数编程语言是高级语言。 何为高级…

K8S---通过curl访问api

1、列出所有的接口 curl --cacert /opt/kubernetes/ssl/ca.pem --cert /opt/kubernetes/ssl/default-admin.pem --key /opt/kubernetes/ssl/default-admin-key.pem https://10.240.184.74:6443/ 2、列出核心api的版本 curl --cacert /opt/kubernetes/ssl/ca.pem -…

手敲MyBatis(十四章)-解析含标签的动态SQL语句

1.前言 这一章主要的就是要解析动态标签里的Sql语句&#xff0c;然后进行条件语句的拼接&#xff0c;动态标签实现了trim和if标签&#xff0c;所以Sql节点就要加上TrimSqlNode和ifSqlNode&#xff0c;我们最终要获取Sql源&#xff0c;动态Sql语句需要一些处理&#xff0c;所以…

SpringCloud系列篇:核心组件之声明式HTTP客户端组件【远程消费】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一. 远程消费组件是什么 二. 远程消…

竞赛练一练 第22期:NOC大赛每日一练,python题目刷题第7天,包含答案解析

题目来自:NOC大赛创客智慧编程赛项Python 复赛模拟题(一) 第一题: 编写一个彩票游戏:随机生成一个不重复的五位数作为彩票号,游戏提示用户输入一个五位整数,然后根据下面的规则判断用户是否能赢得奖金,最后要求输出彩票号和奖金。 (1)若用户输入的数字和彩票的数字完…

c语言考试代码

文章目录 文件操作题 “%”&#xff1a;格式化字符串的起始标志。 “0”&#xff1a;表示使用零来填充输出字段的宽度。 “4”&#xff1a;表示输出字段的宽度为4个字符&#xff0c;如果输出的十六进制数不足4位&#xff0c;则在左边用零进行填充。 “x”&#xff1a;表示以十六…

MySql海量数据存储与优化

一、Mysql架构原理和存储机制 1.体系结构 2.查询缓存 3.存储引擎 存储引擎的分类 innodb&#xff1a;支持事务&#xff0c;具有支持回滚&#xff0c;提交&#xff0c;崩溃恢复等功能&#xff0c;事务安全myisam:不支持事务和外键&#xff0c;查询速度高Memory&#xff1a;利…

Spring Boot实现数据加密脱敏:注解 + 反射 + AOP

文章目录 1. 引言2. 数据加密和脱敏的需求3. Spring Boot项目初始化4. 敏感数据加密注解设计5. 实现加密和脱敏的工具类6. 实体类和加密脱敏注解的使用7. 利用AOP实现加密和脱敏8. 完善AOP切面9. 测试10. 拓展功能与未来展望10.1 加密算法的选择10.2 动态注解配置 11. 总结 &am…

CHS_02.1.1.2+操作系统的特征

CHS_02.1.1.2操作系统的特征 操作系统的四个特征并发这个特征为什么并发性对于操作系统来说是一个很重要的基本特性资源共享虚拟异步性 各位同学 大家好 在这个小节当中 我们会学习 操作系统的四个特征 操作系统有并发 共享 虚拟和异部这四个基本的特征 其中 并发和共享是两个…

机器人的末端执行器由什么零件组成,有什么作用。

问题描述&#xff1a;机器人的末端执行器由什么零件组成&#xff0c;有什么作用。 问题解答&#xff1a; 机器人的末端执行器是机器人机械结构的最末端部分&#xff0c;用于执行具体的任务和与环境进行交互。末端执行器通常由多个零部件组成&#xff0c;其主要作用是完成机器…

log4j RCE漏洞原理分析及检测

实现原理 log4j支持使用表达式的形式打印日志&#xff0c;比如 logger.info("system propety: ${sys:user.dir}");问题就在与表达式支持非常多样&#xff0c;其中有一个jndi就是今天的主题 logger.info("system propety: ${jndi:schema://url}");jdk将从…

学习笔记——C++ do while语句

作用&#xff1a;满足循环条件&#xff0c;执行循环语句 语法&#xff1a;do{循环语句}while{循环条件}&#xff1b; 注意&#xff1a;与while的区别在于do while 会先执行一次循环语句&#xff0c;再判断循环条件。 示例&#xff1a;打印0-9的数字 #include<bits/stdc.h…

图神经网络|9.3 邻接矩阵的变换

由于邻接矩阵中一般不会&#xff08;i,i&#xff09;等于1&#xff0c;除非第i个点上有自环。 而如果用邻接矩阵去乘上特征矩阵&#xff0c;那么将丢失自身向自身的贡献。 此时可以再邻接矩阵的基础上&#xff0c;再加上一个单位阵&#xff0c;从而使得最终的结果包含自身对整体…

RedisInsight - Redis官方可视化工具

一、RedisInsight 简介 RedisInsight 是一个直观高效的 Redis GUI 管理工具&#xff0c;它可以对 Redis 的内存、连接数、命中率以及正常运行时间进行监控&#xff0c;并且可以在界面上使用 CLI 和连接的 Redis 进行交互&#xff08;RedisInsight 内置对 Redis 模块支持&#…