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

news2024/11/15 17:43:55

🥳🥳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

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

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

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

相关文章

【年度重磅】《2023华为开发者宝典》覆盖16+技术领域,30+华为云专家倾力打造,免费下载

《2023华为开发者宝典》重磅发布&#xff0c;点击下载&#xff0c;欢迎大家转发赠阅&#xff0c;相互交流学习。 时光荏苒&#xff0c;转眼间我们已经告别挑战与机遇并存的2023年&#xff0c;迎接充满无限可能的2024年。 截至到2023年&#xff0c;华为云生态已聚合了全球超过5…

大数据StarRocks(四) :常用命令

这次主要介绍生产工作中使用Starrocks时的常用命令 4.1 连接StarRocks 4.1.1 Linux命令行连接 [roothadoop1011 fe]# yum install mysql -y [roothadoop1011 fe]# mysql -h hadoop101 -uroot -P9030 -p4.1.2 Windows客户端 DBeaver 连接 4.2 常用命令 4.2.1 查看状态 1. 查…

用js随机添加字母

样式 <style>.itp {width: 200px;height: 60px;border: 5px solid red;text-align: center;line-height: 60px;font-size: 30px;margin: 10px;}button {width: 80px;height: 30px;color: rgb(229, 225, 232);border-radius: 4px;font-size: 20px;outline: none;border: …

猫头虎分享已解决Bug || 解决Vue.js not detected的问题 ️

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

WEB 3D技术 three.js 顶点旋转

我们来说说几何体顶点的旋转 官网搜索 BufferGeometry 这里 我们有 x y z 三个轴的旋转 例如 我们这样的代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; i…

阿里云新用户的定义与权益

随着云计算的普及&#xff0c;阿里云作为国内领先的云计算服务提供商&#xff0c;吸引了越来越多的用户。对于新用户来说&#xff0c;了解阿里云新用户的定义和相关权益非常重要&#xff0c;因为它关系到用户能否享受到更多的优惠和服务。 一、阿里云新用户的定义 阿里云新用户…

arm64架构编译electron长征路

1. gn工具生成 在arm64下需要构建对应架构的gn文件。 源代码下载,并且切换到对应的版本。 git clone https://gn.googlesource.com/gn cd gn git checkout 5a004f9427a0将gn源码放在src/tools/gn目录下,内容如下图 1.1 问题,找不到last_commit_position.h文件 问题描述如…

Flask:URL与视图映射

本文章只作为个人笔记. 文章目录 前言一、URL与视图映射二、介绍总结 前言 第二个flask项目. 一、URL与视图映射 开启debug模式. from flask import Flask, requestapp Flask(__name__)# url:http[80]/https[443]://ww.qq.com:443/path # url与视图:path与视图app.route(/)…

Qt QPushButton按钮控件

文章目录 1 属性和方法1.1 文本1.2 图标1.3 样式表1.4 信号 2 实例2.1 布局2.2 添加图标2.3 添加样式表2.4 代码实现 1 属性和方法 按钮除了可以设置显示文本之外&#xff0c;还可以设置图标 1.1 文本 可以获取和设置按钮上显示的文本 // 获取和设置按钮的文本 QString tex…

强化学习6——动态规划置策略迭代算法,以悬崖漫步环境为例

策略迭代算法 通过策略评估与策略提升不断循环交替&#xff0c;得到最优策略。 策略评估 固定策略 π \pi π 不变&#xff0c;估计状态价值函数V 一个策略的状态价值函数&#xff0c;在马尔可夫决策过程中提到过&#xff1a; V π ( s ) ∑ a ∈ A π ( a ∣ s ) ( r (…

java案例知识点

一.会话技术 概念 技术 二.跨域 三.过滤器 四.拦截器

test mutation-03-变异测试 mujava Mutation 入门

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) test 系统学习-04-test converate 测试覆盖率 jacoco 原理介绍 Java (muJ…

四 视图

1、实验目的 理解SQL成熟设计基本规范&#xff0c;能够熟练使用SQL语句来创建需要的视图&#xff0c;定义数据库外模式&#xff0c;并能使用所创建的视图实现数据管理。 2、实验内容及要求 使用SQL对数据库进行各类查询数据操纵操作&#xff0c;掌握单行数据插入、多行数据插…

设计模式的艺术P1基础—第1章 概述

刘伟&#xff0c;2020 概述&#xff1a;4部分&#xff0c;26章。 P1:基础&#xff08;1-2章&#xff09; P2:创建型设计模式&#xff08;创建艺术&#xff0c;3-8章&#xff09; P3:结构型设计模式&#xff08;组合艺术&#xff0c;9-15章&#xff09; P4:行为型设计模式&…

文件系统和日志

目录 一、inode号和black &#xff08;一&#xff09;inode号概述 &#xff08;二&#xff09;硬链接和软链接 &#xff08;三&#xff09;inode值 二、日志 &#xff08;一&#xff09;日志的分类 1.系统日志 2.用户日志 3.程序日志 &#xff08;二&#xff09;日志…

【SpringCloud Alibaba笔记】(4)Seata处理分布式事务

Seata 分布式事务问题 单机单库没这个问题&#xff0c;分布式之前从1: 1 -> 1:N ->N:N 分布式之后 单体应用被拆分成微服务应用&#xff0c;原来的三个模块被拆分成三个独立的应用分别使用三个独立的数据源&#xff0c;业务操作需要调用三个服务来完成。 此时每个服务…

计算机毕业设计 基于javaweb的学生交流培养管理平台/系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

算法通关村番外篇-LeetCode热题100系列一

大家好我是苏麟 , 今天开始出这个LeetCode热题100系列 . LeetCode热题100 , 是LeetCode的热门题目也是面试比较爱考的 . 大纲 两数之和 两数之和 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;…

Visual Studio 2022 AI Code 支持

1.先在 Log In | Codeium Free AI Code Completion & Chat 上注册一个用户 在Visual Stuido 中扩展中搜索 codeium 并安装 安装完成后登录即可。 注意国内可能存在网络问题无法使用这时建议使用代理进行登录。 地址如下&#xff1a; Sign Up | Codeium Free AI Code Co…

金蝶EAS pdfviewlocal.jsp接口存在任意文件读取漏洞 附POC软件

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 金蝶EAS简介 微信公众号搜索:南风漏洞复现文库 该…