SpringCloud系列篇:核心组件之配置中心组件

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于SpringCloud的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

 一.前言

二.配置中心组件是什么

三. 为什么要使用配置中心组件

四.使用配置中心组件的步骤 

1.引入依赖

2.进入nacos编写配置

3.读取配置       

4.不同环境下的配置


一.前言

        微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。

        由于每个服务都需要必要的配置信息才能运行,所以一套集中式的,动态的配置管理设施是必不可少的

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

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

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

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

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

二.配置中心组件是什么

        配置中心组件是一种用于管理应用程序配置信息的工具或服务。它通常可以集中存储应用程序的各种配置数据,如数据库连接字符串、API密钥、环境变量等,以便方便地进行配置管理和维护。使用配置中心组件可以大大简化应用程序的部署和维护工作,同时也有助于提高应用程序的可靠性和安全性。常见的配置中心组件包括Spring Cloud Config、Consul、Zookeeper等

三. 为什么要使用配置中心组件

这里我还是列举一些场景,来便于理解吧


        我们在生产环境部署的时候,为了服务的可用性以及负载,通常一个服务会启动多个实例,要么在不同的机器 要么在相同机器不同端口…【例如 商品服务启动4个,订单服务启动4个,用户服务启动N个,文件上传服务启动X个等等…】

        当服务启动的时候便会去加载自己的配置文件application.properties或者application.yml

一气呵成…这本身,是没有问题的。但是我们总会面临因业务更改导致配置文件需要新增/修改/删除属性…那么在这样的场景中,我们该如何面对呢??

是选择更改配置文件后,从新打包部署?

还是将配置文件存放部署的服务机器某路径上,更改保存再重启服务?

两种方式对比的话,第二种方式可能效率更高一点。但是我们微服务通常又是使用容器化部署,如果保存在宿主机某一处的话,也是涉及到目录挂载问题的,且在服务器上,也不方便多个服务统一管理…

这时候,咱们统一的配置中心就横空出世啦!!!

四.使用配置中心组件的步骤 

1.引入依赖

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.进入nacos编写配置

关于nacos的下载,在之前的博文中已经提及了nacos的使用

点击发布即是编写好了这个配置文件,那么再配置列表中便可以看到刚刚所写好的这个配置文件

3.读取配置       

 然后咱自己写的项目就要去读取这个配置文件,那么这个配置文件在项目中肯定要比我们自身项目中的配置文件先读取。所以这里需要再写一个配置文件用于读取nacos中所编写的文件

bootstrap.yml:

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

要使bootstrap.yml 先于application.yml 加载,就必须先导入一个依赖

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

然后需要再项目中读取配置文件

单个读取文件中的属性

package com.provider.main;
import com.provider.main.config.EmailProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/myconfig")
@Slf4j
public class ConfigController {

    @Value("${email.user}")
    private String user;
    @Value("${email.code}")
    private String code;

 

    @RequestMapping("/test1")
    public String test1() {
        log.info("user{},code{}",user,code);
        return "SB";
    }

    @RequestMapping("/test2")
   

}

效果演示

读取整个文件中的配置属性

package com.provider.main.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author是辉辉啦
 * @create 2024-01-07-18:41
 */
@ConfigurationProperties(prefix = "email")
@Component
@Data
public class EmailProperties {
    private String user;
    private String code;

}

测试

package com.provider.main;
import com.provider.main.config.EmailProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/myconfig")
@Slf4j
public class ConfigController {
    @Autowired
    private EmailProperties emailProperties;

    @RequestMapping("/test2")
    public Object test2() {
        return emailProperties;
    }


}

效果演示

以上两种方式都可以读取到配置文件的属性值,不过整个的读取效率会更加高

4.不同环境下的配置

我们可以在整个命名空间中去增加多个环境的空间,其中去存放不同环境中所需的配置文件

我们只需要在配置文件中加上这一个配置,就能够指定对应的空间了

namespace: 1e189198-5765-4b5d-acdd-71e8baa387c0

其中填的是对应空间的id

我们在项目完成了,打包的时候是不需要将这个配置给写上的,因为这样子的话,我们就不好更改空间了,我们直接不写,这样运行这个打好的jar包时,可以使用命令的方式指定对应的空间

在最后,我也附上整个yml文件的配置

server:
  port: 8082
spring:
  application:
    name: provider
  cloud:
    nacos:
        server-addr: localhost:8848
        config:
          server-addr: ${spring.cloud.nacos.server-addr}
          prefix: ${spring.application.name}
          file-extension: yaml
          group: DEFAULT_GROUP
          # 共享配置集数组
          shared-configs:
            - data-id: redis.yaml
            # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
              group: DEFAULT_GROUP
            # 是否自动刷新配置,默认为 false
              refresh: true
          #dev环境 --开发
          namespace: 1e189198-5765-4b5d-acdd-71e8baa387c0

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊  

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

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

相关文章

揭秘六大热门认证考试

六大热门认证考试是什么❓今天为大家详细解读PMP、ACP、CDGA、软考中项、软考高项、NPDP、CISP等热门认证考试&#xff0c;让你不再彷徨&#x1f447; 1️⃣PMP &#x1f451;PMP认证是全qiu公ren的项目管理专业认证&#xff0c;旨在评估项目管理人员在项目过程中所需的知识、技…

重生奇迹MU游戏中勇者大陆

玩重生奇迹MU&#xff0c;我们进入游戏首先会来到勇者大陆。在看到勇者大陆市场&#xff0c;有很多交易的玩家也在这里&#xff0c;在勇者市场里面有商店。接下来介绍主要的NPC 的作用和怪物有那些&#xff1f; 勇者大陆卖药的商店老板莉雅 商店里面会有卖治疗药水&#xff0…

06-微服务-SpringAMQP

SpringAMQP SpringAMQP是基于RabbitMQ封装的一套模板&#xff0c;并且还利用SpringBoot对其实现了自动装配&#xff0c;使用起来非常方便。 SpringAmqp的官方地址&#xff1a;https://spring.io/projects/spring-amqp SpringAMQP提供了三个功能&#xff1a; 自动声明队列、交…

红队打靶练习:EVM: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 目录探测 1、gobuster 2、dirsearch WEB wpscan get username get password MSF get shell 提权 get root get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interf…

NACHI机器人模拟示教器如何切换中文

前言 现在开始学习机器人的编程语言&#xff0c;那么要学习会用首先得用模拟示教器来学习&#xff0c;但是全是英文确实比较难受一些些&#xff0c;没有中文来的直观。所以摸透一下如何给示教器更换语言。 具体步骤 步骤一&#xff1a;将中文的汉化包下载下来。具体的下载链…

STL——string详解

目录 &#x1f4a1;介绍 &#x1f4a1;string的基本操作 &#x1f4a1;string的构造函数 &#x1f4a1;string赋值操作 &#x1f4a1;string字符串拼接 &#x1f4a1;string的查找和替换 &#x1f4a1;string字符串比较 &#x1f4a1;string字符存取 &#x1f4a1;str…

爬虫实战 - 微博评论数据可视化

简介&#xff1a; 我们都知道在数据比较少的情况下&#xff0c;我们是可以很轻易的获取到数据中的信息。但是当数据比较庞大的时候呢&#xff0c;我们就很难看出来了。尤其是面对现如今数以万计的数据&#xff0c;就更了。 不过好在我们可以通过计算机来帮我们进行分析&#…

算力-计算量,关于TOPS和FLOPS,及FLOPs

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/zaibeijixing/article/details/135425642 ———————————————— 目录 一、易混淆的三…

知识图谱之汽车实战案例综述与前瞻分析

知识图谱的前置介绍 什么是知识图谱 知识图谱本质(Knowledge Graph&#xff09;上是一种叫做语义网络(semantic network &#xff09; 的知识库&#xff0c;即具有有向图结构的一个知识库&#xff1b;图的结点代表实体&#xff08;entity&#xff09;或者概念&#xff08;con…

学习笔记——C++一维数组

1&#xff0c;一维数组的定义方式 三种定义方式 1&#xff0c;数据类型 数组名[ 数组长度 ]&#xff1b; 2&#xff0c;数据类型 数组名[ 数组长度 ]{值1&#xff0c;值2&#xff0c;值3 ……}&#xff1b;//未说明的元素用0填补 3&#xff0c;数据类型 数组名[ ]{值1&…

【Project】TPC-Online Module (manuscript_2024-01-07)

PRD正文 一、概述 本模块实现隧道点云数据的线上汇总和可视化。用户可以通过注册和登录功能进行身份验证&#xff0c;然后上传原始隧道点云数据和经过处理的数据到后台服务器。该模块提供数据查询、筛选和可视化等操作&#xff0c;同时支持对指定里程的分段显示和点云颜色更改…

WEB 3D技术 three.js 元素居中与获取元素中心点

本文 我们来说让物体居中 以及获取它的中心点 我们上文留下的这个代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; import { RGBELoader } from "three/e…

LCD—液晶显示

本节主要介绍以下内容 显示器简介 液晶控制原理 秉火3.2寸液晶屏简介 使用FSMC模拟8080时序 NOR FLASH时序结构体 FSMC初始化结构体 一、显示器简介 显示器属于计算机的I/O设备&#xff0c;即输入输出设备。它是一种将特定电子信息输出到屏幕上再反射到人眼的显示工具。…

【Java集合篇】HashMap 是如何扩容的

HashMap 是如何扩容的 ✔️ 为什么需要扩容?✔️ 桶元素重新映射✔️链表重新链接✔️ 取消树化✔️拓展知识仓✔️除了rehash之外&#xff0c;哪些操作也会将树会退化成链表? ✔️ 为什么需要扩容? HashMap在Java等编程语言中被广泛使用&#xff0c;用于存储键值对数据。Ha…

【51单片机】独立按键控制LED灯

不同于上篇文章只用代码控制&#xff0c;这次我们要再加上独立按键一同控制LED灯 目录 独立按键控制LED亮灭&#xff1a;代码实现&#xff1a; 独立按键控制LED状态&#xff1a;代码实现&#xff1a; 独立按键实现二进制LED显示&#xff1a;代码实现&#xff1a; 独立按键控制…

Linux进程之间的通信机制(IPC)概述

Linux进程之间通信 为什么需要进程间通信&#xff1f; 进程间的通信&#xff08;IPC&#xff09;指的是两个任意的进程之间的通信。 同一进程在一个地址空间中&#xff0c;所以同一进程的不同模块&#xff0c;&#xff08;不同函数&#xff0c;不同文件&#xff09;之间都是很…

【软件测试】黑盒测试

《等价类划分法》 有效等价类无效等价类 &#xff08;输入条件&#xff09;10 < x < 100&#xff08;有效等价类&#xff09;10 < x < 100&#xff08;无效等价类&#xff09;x < 10 和 x >100 《边界值分析法》 基本原则 如果输入条件规定了取值范围&…

C#,数值计算,基础函数——任意位数π的数值算法源程序与数据可视化

对于数学常数 PI 后面位数的计算与追求&#xff0c;是数学家与计算机科学家们乐此不疲的游戏。 一、圆周率PI简史 圆周率&#xff08;Pi&#xff09;是圆的周长与直径的比值&#xff0c;一般用希腊字母π表示&#xff0c;是一个在数学及物理学中普遍存在的数学常数。π也等于圆…

CRM的request管理笔记

1 request类型 request有两种&#xff0c;device request和link request。 link request link req是对link进行精确控制。 link req是对每个link的请求&#xff0c;比如某一帧是否需要bubble recovery、某一帧是否需要长曝光等feature。device request 对一个设备进行每帧控制…

【JaveWeb教程】(8)Web前端基础:Vue组件库Element之Table表格组件和Pagination分页组件 详细示例介绍

目录 1 Table表格组件1.1 组件演示1.2 组件属性详解 2 Pagination分页2.1 组件演示2.2 组件属性详解2.3 组件事件详解 接下来我们来学习一下ElementUI的常用组件&#xff0c;对于组件的学习比较简单&#xff0c;我们只需要参考官方提供的代码&#xff0c;然后复制粘贴即可。本节…