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

news2024/9/28 3:27:21

  🎉🎉欢迎来到我的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,再重新运行测试


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

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

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

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

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

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

相关文章

C++ queue

目录 一、介绍 二、queue使用 三、模拟实现 四、优先级队列 五、priority_queue使用 OJ题&#xff1a;215. 数组中的第K个最大元素 快速排序 优先级队列 TOPK 六、模拟实现priority_queue 1、仿函数 2、优先级队列类 3、测试函数 一、介绍 1、队列是一种容器适配器…

阿里云服务器固定带宽实际下载速度表,不只是3M固定带宽

阿里云服务器公网带宽上传和下载速度对照表&#xff0c;1M带宽下载速度是128KB/秒&#xff0c;为什么不是1M/秒&#xff1f;阿里云服务器网aliyunfuwuqi.com分享阿里云服务器带宽1M、2M、3M、5M、6M、10M、20M、30M、50M、100M及200M等公网带宽下载速度对照表&#xff0c;附带宽…

VMware Workstation——修改虚拟机配置和设置网络

目录 一、修改配置 1、点击需要修改配置的虚拟机&#xff0c;然后点击编辑虚拟机配置 2、修改内存、CPU、硬盘配置 二、设置网络 1、从虚拟机配置中进入到网络适配器设置 2、选择网络连接模式 一、修改配置 1、点击需要修改配置的虚拟机&#xff0c;然后点击编辑虚拟机配…

Linux进程间通讯 -- 管道

Linux进程间通讯 – 管道 文章目录 Linux进程间通讯 -- 管道1. 原理2. 进程间通讯2.1 管道2.1.1 匿名管道 pipe2.2.2 有名管道 FIFO 2.2 信号2.3 共享内存2.4 本地套接字 1. 原理 Linux 进程间通讯&#xff0c;也称为IPC(InterProcess Communication) 在 Linux 中每个进程都具…

C++实现网站内搜索功能

文章目录 搜索结果的结构下载我们需要的数据分析html结构数据处理去标签之标题去标签之正文内容构造url把上述的数据清理操作对每一个文件都做一遍把处理好的数据都保存到一个.bin文件 构建正排索引构建倒排索引使用cpp-jieba分词计算每个文档中的每个词的权重对所有文档都进行…

格密码基础:光滑参数

目录 一. 铺垫高斯函数 二. 光滑参数图形理解 三. 光滑参数与格基本区 3.1 高斯与均匀分布的统计距离 3.2 光滑参数理解 四. 光滑参数与最短向量 五. 光滑参数与连续最小值 六. 光滑参数与对偶格的上界 七. 光滑参数与格的上界 八. 小结 一. 铺垫高斯函数 定义高斯密…

Django 9 常用通用视图分析

View 提供基于不同http方法执行不同逻辑的功能。 1. 创建 terminal输入 django-admin startapp the_13回车 2.tutorial子文件夹 settings.py注册一下 INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,dja…

九州金榜|孩子步入叛逆期,常常离家出走怎么办?

孩子在拥有了独立意识后&#xff0c;就开始试图挑战父母的权威。他们会主动去质疑父母&#xff0c;主动去证明自己的成熟和独立&#xff0c;还会主动试图逃离父母的控制范围。 近日就收到了家长求助孩子离家出走问题的私信&#xff0c;在得到家长同意&#xff0c;接下来我们就…

Docker-Compose部署Redis(v7.2)分片集群(含主从)

文章目录 一、前提准备1. 文件夹结构 二、配置文件1. redis.conf2. docker-compose文件 三、构建集群1. 自动分配主从关系2.1 构建3 master集群2.2 手动配置从节点 四、测试1. 集群结构2. 分片测试 环境 docker desktop for windows 4.23.0redis 7.2 目标 搭建如下图分片主从…

利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物等影响的实践技术

如何利用ArcGIS实现电子地图可视化表达&#xff1f;如何利用ArcGIS分析空间数据&#xff1f;如何利用ArcGIS提升SCI论文的层次&#xff1f;制图是地理数据展现的直观形式&#xff0c;也是地理数据应用的必要基础。本次课程从ArcGIS的基本操作、ArcGIS 的空间数据分析及ArcGIS 的…

算法基础之货仓选址

货仓选址 核心思想&#xff1a; 贪心 绝对值不等式 : ∣ x – a ∣ ∣ x – b ∣ ≥ ∣ a – b ∣ |x – a| |x – b| ≥ |a – b| ∣x–a∣∣x–b∣≥∣a–b∣ 将n个数两两分组 1~~ n-1 (奇数会剩一个) 分别用绝对值不等式 即可推出来 货仓位置应该在中位数上(奇数) 或在中…

鸿蒙应用开发 闹钟实现

后台代理提醒简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业务…

C# Unity将地形(Terrain)导出成obj文件

C# Unity将地形(Terrain)导出成obj文件 从其他地方搬运过来的&#xff0c;只能到出obj模型&#xff0c;不能导出贴图 using System.IO; using System.Text; using UnityEditor; using UnityEngine; using System;enum SaveFormat { Triangles, Quads } enum SaveResolution {…

Landsat8的辐射定标与大气校正

目录 打开影像辐射定标大气校正计算区域高程计算研究区高程大气校正查看处理结果 打开影像 在文件夹中找到xxx_MTL.txt文件&#xff0c;拖到ENVI中 此处可能会出现无法打开的问题&#xff0c;参考该文章&#xff08;ENVI无法打开Landsat8的头文件问题和解决&#xff09; 辐…

Iceberg从入门到精通系列之十九:分区

Iceberg从入门到精通系列之十九&#xff1a;分区 一、认识分区二、Iceberg的分区三、Hive 中的分区四、Hive 分区问题五、Iceberg的隐藏分区六、分区变换七、分区变换 一、认识分区 分区是一种通过在写入时将相似的行分组在一起来加快查询速度的方法。 例如&#xff0c;从日志…

C#,冒泡排序算法(Bubble Sort)的源代码与数据可视化

排序算法是编程的基础。 常见的四种排序算法是&#xff1a;简单选择排序、冒泡排序、插入排序和快速排序。其中的快速排序的优势明显&#xff0c;一般使用递归方式实现&#xff0c;但遇到数据量大的情况则无法适用。实际工程中一般使用“非递归”方式实现。本文搜集发布四种算法…

【WPF】使用 WriteableBitmap 提升 Image 性能

【WPF】使用 WriteableBitmap 提升 Image 性能 前言WriteableBitmap 背景WriteableBitmap 渲染原理WriteableBitmap 使用技巧案例核心源码测试结果 前言 由于中所周不知的原因&#xff0c;WPF 中想要快速的更新图像的显示速率一直以来都是一大难题。在本文中&#xff0c;我将分…

leetcode“位运算”——只出现一次的数字

只出现一次的数字i&#xff1a; https://leetcode.cn/problems/single-number/ 给你一个非空整数数组 nums&#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现一次的元素。 class Solution { public:int singleNumber(vector<i…

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

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

【深度学习:Domain Adversarial Neural Networks (DANN) 】领域对抗神经网络简介

【深度学习&#xff1a;Domain Adversarial Neural Networks】领域对抗神经网络简介 前言领域对抗神经网络DANN 模型架构DANN 训练流程DANN示例 GPT示例 前言 领域适应&#xff08;DA&#xff09;指的是当不同数据集的输入分布发生变化&#xff08;这种变化通常被称为共变量变…