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

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

 

 2. controller类引入

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

3. 测试验证

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

四、环境的设置

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

1. 创建命名空间 

 

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

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

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

4. 指定命名空间

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

        我们重新启动访问测试 

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


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

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

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

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

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

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

相关文章

MMFF-NET:多层次多尺度特征融合的弱光图像增强网络

这是我去年的工作&#xff0c;我录用的第一篇SCI&#xff0c;很拉&#xff0c;3区。今年中科院新版分区&#xff0c;变成4区了。很遗憾。后面会持续给大家更新我的文章以及我的内容。硕士阶段的东西几乎创新点都很差。 但是对于初学者我希望它有一定的参考价值。 文章链接&am…

利用Type类来获得字段名称(Unity C#中的反射)

使用Type类以前需要引用反射的命名空间&#xff1a; using System.Reflection; 以下是完整代码&#xff1a; public class ReflectionDemo : MonoBehaviour {void Start(){A a new A();B b new B();A[] abArraynew A[] { a, b };foreach(A v in abArray){Type t v.GetTyp…

不带控制器打包exe,转pdf文件时失败的原因

加了注释的两条代码后&#xff0c;控制器会显示一个docx转pdf的进度条。这个进度条需要控制器的实现&#xff0c;如果转exe不带控制器的话&#xff0c;当点击转换为pdf的按钮就会导致程序出错和闪退。 __init__.py文件的入口

分布式事务理论及Seata实践

分布式事务简介 事务是指作为单个逻辑工作单元执行的一系列操作&#xff0c;要么完全地执行&#xff0c;要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成&#xff0c;否则不会永久更新面向数据的资源。事务的四个特征&#xff08;ACID&#xff09; …

FineBI实战项目一(3):Kettle实现ETL到数据仓库

目前&#xff0c;finebi_shop_bi 中是没有任何数据的&#xff0c;是一个空的数据库。而后续我们的所有数据分析都将在该数据库中进行。我们第一件事情就是要将 「finebi_shop」数据库中的所有表抽取到「finebi_shop_bi」数据库中。要抽取并装载数据到「finebi_shop_bi」中&…

超维空间M1无人机使用说明书——51、ROS无人机使用AR二维码识别与定位

引言&#xff1a;二维码识别与定位是指ROS通过创建AR标签并且对AR标签进行识别&#xff0c;标签可以由自己任意创建&#xff0c;具体方法会在文中给出&#xff0c;摄像头可以通过识别AR标签大小和姿态获取到标签对应的ID和位置等信息&#xff0c;实现识别与定位 注意&#xff…

Qt/QML编程学习之心得:Linux下Thread线程创建(26)

GUI设计中经常为了不将界面卡死,会用到线程Thread,而作为GUI设计工具,Qt也提供了一个这样的类,即QThread。 QThread对象管理程序中的一个控制线程。线程QThread开始在run()中执行。默认情况下,run()通过调用exec()启动事件循环,并在线程内运行Qt事件循环。 也可以通过…

Camtasia2024苹果Mac电脑版(屏幕录制剪辑软件)

Camtasia Mac2024免费版是一款由TechSmith公司官方进行汉化推出的最新版本&#xff0c;借助Camtasia&#xff0c;您可以轻松记录屏幕并创建优美&#xff0c;专业的视频。记录所有内容-您的整个屏幕或只是一个窗口。或者&#xff0c;添加您已经拥有的视频&#xff0c;图像&#…

python 文件

open """ def open(file: FileDescriptorOrPath, //路径mode: OpenTextMode "r", //设置打开文件的模式 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 w 打开一个文件只用写入。如果该文件已存在则打开文件&#…

一文讲透Python数据分析可视化之直方图(柱状图)

直方图&#xff08;Histogram&#xff09;又称柱状图&#xff0c;是一种统计报告图&#xff0c;由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据类型&#xff0c;纵轴表示分布情况。通过绘制直方图可以较为直观地传递有关数据的变化信息&#xff0c;使…

【Python从入门到进阶】46、58同城Scrapy项目案例介绍

接上篇《45、Scrapy框架核心组件介绍》 上一篇我们学习了Scrapy框架的核心组件的使用。本篇我们进入实战第一篇&#xff0c;以58同城的Scrapy项目案例&#xff0c;结合实际再次巩固一下项目结构以及代码逻辑的用法。 一、案例网站介绍 58同城是一个生活服务类平台&#xff0c…

msckf_vio在ubuntu20.04中的编译

1.新建catkin workspace文件夹&#xff0c;并在其中新建src文件夹&#xff0c;并将源码clone至src内。 源码地址&#xff1a;https://github.com/KumarRobotics/msckf_vio 目录层级示意如下&#xff0c;build和devel不必新建&#xff0c;后续指令会自动新建。 2. 在编译之前…

java CAS

CAS 在高并发场景&#xff0c;可以使用加锁 或者CAS来保证原子性&#xff0c;但是加锁是很重量级的操作&#xff0c;CAS类似于乐观锁CAS &#xff08; Compare and swap &#xff09;比较并交换&#xff0c;是实现并发算法时常用到的技术&#xff0c;包含三个操作数&#xff1…

LVGL的List控件的触摸按键和实体按键的处理

在LVGL的List控件使用过程中&#xff0c;虽然通过触摸按键选择item&#xff0c;但是有些场景需要实体按键选取item&#xff0c;但是LVGL 的V8.3中没有像Emwin那样有函数选择list item的函数。LVGL中List引入了Group的概念&#xff0c;把列表项都添加到同一个group中。然后通过更…

Linux Capabilities 基础概念与基本使用

目录 1. Linux capabilities 是什么&#xff1f; 2. capabilities 的赋予和继承 线程的 capabilities Permitted* 允许 Effective* 有效 Inheritable* 遗传 Bounding&#xff08;集合&#xff09; Ambient 文件的 capabilities Permitted Inheritable Effective 3…

2.4 DEVICE GLOBAL MEMORY AND DATA TRANSFER

在当前的CUDA系统中&#xff0c;设备通常是带有自己的动态随机存取存储器&#xff08;DRAM&#xff09;的硬件卡。例如&#xff0c;NVIDIA GTX1080具有高达8 GB的DRAM&#xff0c;称为全局内存。我们将互换使用全局内存和设备内存这两个术语。为了在设备上执行内核&#xff0c;…

通过聚道云软件连接器实现钉钉与自研主数据系统的完美融合

客户介绍 某知名高校&#xff0c;拥有数千名教职工&#xff0c;日常管理涉及大量的人员异动信息。该高校设有多个学院和研究所&#xff0c;涵盖了工、理、管、文等多个学科领域。该高校是一所充满活力和潜力的学府&#xff0c;致力于为学生提供优质的教育资源和多元化的学习环…

广义零样本学习综述的笔记

1 Title A Review of Generalized Zero-Shot Learning Methods&#xff08;Farhad Pourpanah; Moloud Abdar; Yuxuan Luo; Xinlei Zhou; Ran Wang; Chee Peng Lim&#xff09;【IEEE Transactions on Pattern Analysis and Machine Intelligence 2022】 2 conclusion Generali…

三种主流流协议的浏览器播放解决方案

三种主流流协议的浏览器播放解决方案 流协议介绍 主流的流协议&#xff08;streaming protocol&#xff09;包括HLS、RTMP、RTSP&#xff0c;下面依次介绍下三种视频流。 HLS HLS&#xff08;Http Live Streaming) 是一个由苹果公司提出的基于HTTP的流媒体网络传输协议&…

微信小程序 引导地址授权 获取位置信息 uniapp

概述 获取位置信息&#xff0c;需要保证是否授权位置信息&#xff0c;有几个条件是导致无法授权的原因 &#xff08;1&#xff09;微信应用未授权定位设置 &#xff08;2&#xff09;首次进入小程序未授权位置信息 &#xff08;3&#xff09;小程序之前阻止过授权位置信息 &…