Nacos 2.x 系列【9】配置中心

文章目录

    • 1. 概述
      • 1.1 配置
      • 1.2 配置中心
    • 2. 案例演示
      • 2.1 环境搭建
      • 2.2 自定义参数配置
      • 2.2 服务配置

1. 概述

1.1 配置

在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。

在实际开发中,配置文件往往有以下一些配置:

  • 数据库地址、用户名密码
  • 各种框架的配置项,例如Spring BootMybatisRabbitMQ都有很多配置
  • 项目参数配置,例如是否开启短信登录、密码限制长度等

配置可以让静态的系统工件或者交付物(如WARJAR 包等)更好地和实际的物理运行环境进行适配。这些配置项往往都是以配置文件的形式存在,在系统部署的过程中,由系统管理员或者运维人员完成。

Spring Cloud微服务项目中,后台一般都有很多个,每个Spring Boot都有一个application.yml配置文件,这些配置是分散的,非常不方便管理。而且配置并不是一成不变的,往往还需要根据系统环境运行状态进行实时变更。

1.2 配置中心

配置中心就是一个集中式管理配置信息的解决方案,它最核心的功能就是配置管理,可以进行配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等与配置相关的活动。

常见的配置中心有:

  • Nacos
  • Apollo
  • Spring Cloud Config

在使用Nacos作为注册中心后,一般都会直接选择Nacos的配置中心,而不会去再接入一个第三方组件,接下来我们学习如何使用Nacos进行管理配置。

2. 案例演示

:还是在之前的案例代码基础上进行集成,使用的是Spring Cloud生态环境。

2.1 环境搭建

引入配置中心依赖:

        <!--Nacos 配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

application.yml配置文件添加配置:

server:
  port: 9003
spring:
  application:
    name: order-demo
  cloud:
    nacos:
      # 服务端用户名密码
      username: nacos
      password: nacos
      # 服务发现
      discovery:
        # 命名空间
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        # 服务端地址,默认:127.0.0.1:8848
        server-addr: 127.0.0.1:8848
      # 配置中心
      config:
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        server-addr: 127.0.0.1:8848

这时启动项目会直接报错,提示我们没有导入配置:

09:33:07.022 [main] DEBUG org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter -- Application failed to start due to an exception
org.springframework.cloud.commons.ConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set

2.2 自定义参数配置

配置项通常都是由参数名称与参数值组成,一组相关或者不相关的配置项的集合称为配置集,在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。

除了配置后台服务,业务系统中也会存在很多系统配置参数,比如OA系统中需要配置一个密码长度限制参数。对于这些系统配置,我们可以放在数据库进行管理,但是需要开发前端管理页面,读取配置时每次都需要查询数据库,就算使用缓存,也需要支持缓存同步。这时可以使用Nacos配置中心进行管理,这样更方便,并支持动态刷新。

对于上面的报错提示,在Nacos 1.x的版本中,使用的是bootstrap.yml添加Nacos相关配置,例如:

server:
  port: 9005
spring:
  application:
    name: app-service001
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml
        enabled: true

bootstrap.yml机制是由spring-cloud-starter-bootstrap提供的,Spring Boot 默认不支持,在Spring Boot 2.4之后的版本,提供了spring.config.import导入配置的方式,并支持远程配置中心,所以Spring Cloud也就移除了spring-cloud-starter-bootstrapSpring Cloud Alibaba2021.0.1.0开始,也移除了这种方式,改用spring.config.import作为默认集成配置中心的方式。

使用spring.config.import导入Nacos中的配置,nacos:system-param.yaml由两部分组成,第一部分表示某个类型的注册中心,第二部分表示对应的配置集ID

spring:
  application:
    name: order-demo
  # 导入配置
  config:
      - nacos:system-param.yaml # 在拉取nacos配置异常时会快速失败,会导致 spring 容器启动失败
      #- optional:nacos:test.yml  # 监听 DEFAULT_GROUP:test.yml
      #- optional:nacos:test01.yml?group=group_01 # 覆盖默认 group,监听 group_01:test01.yml
      #- optional:nacos:test02.yml?group=group_02&refreshEnabled=false # 不开启动态刷新
  # 省略其他......

进入到控制台,选择进行的命名空间,点击创建配置:
在这里插入图片描述

添加配置:
在这里插入图片描述

Nacos根据以下规则找到对应的配置:

命名空间+分组+数据集ID

其中命名空间,之前我们已经介绍过了,分组表示对配置集进行分组,从而区分Data ID相同的配置集。这里未填写配置分组的名称,默认采用DEFAULT_GROUP作为分组名。当不同的应用或组件使用了相同的配置类型时,可以添加分组进行隔离。

Data ID表示配置集ID,简单理解为配置文件名称,一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。

Data ID完整格式如下:

${prefix}-${spring.profiles.active}.${file-extension}

相关说明:

  • prefix: 默认为 spring.application.name 的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active: 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension: 为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

添加完成后,显示如下:
在这里插入图片描述

使用@Value @RefreshScope注解获取配置,@RefreshScopeSpring Cloud原生注解用于实现配置自动更新:

@RequestMapping("/order")
@RestController
@RefreshScope
public class OrderController {

    @Value("${password.length}")
    Integer length;

    @GetMapping("/length")
    public Integer length() {
        return length;
    }
}

访问接口,然后修改配置,观察是否动态刷新:
在这里插入图片描述

2.2 服务配置

除了这些自定义配置项,还可以将Spring BootMybatisRabbitMQ等各种框架的配置项放在配置中心,项目部署时,直接在Nacos中修改配置即可。

首先创建一个后台服务的配置集,Data ID为服务名加文件后缀,添加服务启动端口。除此还可以添加数据库、RedisMQ等部署时需要改动的配置项:
在这里插入图片描述

application.yml文件中,只保存一些不会变动的配置项,以及Nacos的配置,并使用spring.config.import导入服务配置:

spring:
  application:
    name: order-demo
  cloud:
    nacos:
      # 服务端用户名密码
      username: nacos
      password: nacos
      # 服务发现
      discovery:
        # 命名空间
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        # 服务端地址,默认:127.0.0.1:8848
        server-addr: 127.0.0.1:8848
      # 配置中心
      config:
        namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
        server-addr: 127.0.0.1:8848
  # 导入配置
  config:
    import:
      - nacos:order-demo.yaml  # 服务配置
      - nacos:system-param.yaml  # 系统参数配置

启动项目,查看启动端口是否使用的是配置中心的配置,无误则集成成功。

因为application.yml配置了Nacos的地址,在部署时需要修改,这时可以使用启动命令直接覆盖参数即可,例如:

java -Dspring.cloud.nacos.discovery.server-addr=xxx -Dspring.cloud.nacos.discovery.namespace=xxx -Dspring.cloud.nacos.config.server-addr=xxx ......

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

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

相关文章

华为OD机试【计算最接近的数】(java)(100分)

1、题目描述 给定一个数组X和正整数K&#xff0c;请找出使表达式X[i] - X[i1] … - X[i K 1]&#xff0c;结果最接近于数组中位数的下标i&#xff0c;如果有多个i满足条件&#xff0c;请返回最大的i。 其中&#xff0c;数组中位数&#xff1a;长度为N的数组&#xff0c;按照元…

922. 按奇偶排序数组 II - 力扣

1. 题目 给定一个非负整数数组 nums&#xff0c; nums 中一半整数是 奇数 &#xff0c;一半整数是 偶数 。 对数组进行排序&#xff0c;以便当 nums[i] 为奇数时&#xff0c;i 也是 奇数 &#xff1b;当 nums[i] 为偶数时&#xff0c; i 也是 偶数 。 你可以返回 任何满足上述…

FreeRtos进阶——消息队列的操作逻辑

消息队列&#xff08;queue&#xff09; 在不同的任务之间&#xff0c;如果我们需要互相之间通信&#xff0c;使用全局变量进行通信&#xff0c;是一种不安全的通信的方式。为保证线程安全&#xff0c;我们需要引入消息队列的通信方式。 粗暴的消息队列 为保证线程的安全&am…

生成验证码的奥秘:从列表到字符串的魔法转换

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;验证码生成的背景与需求 二、生成验证码的方法一&#xff1a;列表生成…

大模型时代的具身智能系列专题(四)

google deepmind团队 谷歌旗下最大的两个 AI 研究机构——地处伦敦 DeepMind 与位于硅谷的 Google Brain 合并成立新部门 Google DeepMind。其将机器学习和系统神经科学的最先进技术结合起来&#xff0c;建立强大的通用学习算法。代表作有AlphaGo&#xff0c;AlphaStar&#x…

基于语音识别的智能电子病历(三)之 Soniox

Soniox成立于2020年&#xff0c;目前总部位于美国加州福斯特城&#xff0c;该公司开发了市场上最好的语音识别引擎之一。该公司目前提供市面上领先的云转录引擎之一——这也是audioXpress成功用于采访和一般语音转文本转换的引擎。 专注于语音AI的Soniox在2021年推出了世界上第…

封装,static,代码块,对象的打印

封装&#xff0c;static&#xff0c;代码块&#xff0c;对象的打印 1. 封装1.1 封装的概念1.2 包的概念1.3 访问修饰限定符1.4 被封装的属性如何set和get&#xff1f; 2. static2.1 再谈学生类2.2 static修饰成员变量2.3 static修饰成员方法2.4 static成员变量初始化 3. 代码块…

基于Python的k-means聚类分析算法的实现与应用,可以用在电商评论、招聘信息等各个领域的文本聚类及指标聚类,效果很好

以微博考研话题为例 思路步骤&#xff1a; 数据清洗&#xff1a; 使用pandas读取数据文件&#xff0c;并进行数据清洗和预处理&#xff0c;包括去除重复值、数据替换等。 数据处理实现&#xff1a; 数据处理的过程如下&#xff1a; 数据清洗主要包括去重和数据转换两个步骤…

C++的第一道门坎:类与对象(二)

一.类中生成的默认成员函数详解 0.类的6个默认成员函数 编译器会给类生成六个默认成员函数&#xff0c;在类中即使我们什么都不做&#xff0c;也会自动生成。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数。 下面我们逐…

ubuntu 配置用户登录失败尝试次数限制

前言&#xff1a; 通过修改pam配置来达到限制密码尝试次数&#xff01; 1&#xff1a;修改 /etc/pam.d/login 配置&#xff08;这里只是终端登录配置&#xff0c;如果还需要配置SSH远程登录限制&#xff0c;只配置下面的 /etc/pam.d/pam.d/common-auth 即可&#xff09; vim…

如何克隆非默认分支

直接git clone下来的我们知道是默认分支&#xff0c;那如何克隆其他分支呢&#xff1a; 比如这个&#xff0c;我们想克隆AdvNet。 我们可以在本地文件夹打开Git Bash 依次输入&#xff1a; git clone --branch AdvNet https://github.com/wgcban/SemiCD.git cd SemiCD git b…

【全开源】旅游系统源码(Uniapp+FastAdmin+ThinkPHP)

一款基于UniappFastAdminThinkPHP开发的旅游系统&#xff0c;包含消费者端&#xff08;手机端&#xff09;、机构工作人员&#xff08;手机端&#xff09;、机构端&#xff08;PC&#xff09;、平台管理端&#xff08;PC&#xff09;。机构可以发布旅游线路、景点项目&#xff…

计算机网络学习笔记——网络层(b站)

目录 网络层概述 网络层提供的两种服务 ①面向连接的虚电路服务 ②无连接的数据报服务 IPv4 路由选择 路由器转发IP数据报 静态路由选择 动态路由选择 路由信息协议RIP 开放最短路径优先OSPF&#xff08;Open Shortest Path First&#xff09; 内部网关协议IGP&…

【MATLAB】数字滤波器的设计

一、引言 在信号处理过程中&#xff0c;所处理的信号往往混有噪声&#xff0c;从接收到的信号中消除或减弱噪声是信号传输和处理中十分重要的问题。根据有用信号和噪声的不同特性&#xff0c;提取有用信号的过程称为滤波,实现滤波功能的系统称为滤波器。在以往的模拟电路中用的…

10.RedHat认证-Linux文件系统(上)

10.RedHat认证-Linux文件系统(上) ⽂件系统&#xff0c;顾名思义&#xff0c;是⼀个组织⽂件的“系统(system)”。file system ⽂件系统是⽤来组织⽂件的&#xff0c;通俗⼀点理解的话&#xff0c;⽂件系统是⽤来存储⽂件的。 硬盘是不能直接存放⽂件或数据。 我们通过将硬…

美光EMMC芯片丝印型号查询 8LK17/D9PSK, OXA17/JY997

问题说明 最近在使用美光EMMC的时候&#xff0c;发现通过芯片丝印查询不到 芯片的规格说明书&#xff1b; 经过查阅资料&#xff0c;发现美光的EMMC芯片 “由于空间限制&#xff0c;FBGA 封装组件具有与部件号不同的缩写部件标记”&#xff0c;需要通过官网查询丝印的FBGA cod…

百度智能云千帆AppBuilder升级!开放多源模型接入,思考模型再次加速!

>>【v0.5.4版本】 上线时间&#xff1a;2024/5/24 关键发版信息&#xff1a; 大模型优化&#xff1a;开放多源模型接入&#xff0c;思考模型再次加速&#xff01; Agent思考模型&#xff1a;新增AppBuilder专用版模型ERNIE Speed-AppBuilder&#xff0c;自主任务规划…

Euler 欧拉系统介绍

Euler 欧拉系统介绍 1 简介重要节点与版本EulerOS 特色EulerOS 与 openEuler 区别联系Euler 与 HarmonyOS 区别联系 2 openEuler特色支持 ARM&#xff0c;x86&#xff0c;RISC-V 等全部主流通用计算架构融入 AI 生态嵌入式实时能力提升引入 OpenHarmony 一些突出功能 参考 1 简…

BIO/NIO学习

在传送文件的时候常常出现这么一个问题&#xff0c;就是当客户端的文件全部传送完了之后&#xff0c;服务器没有接收到客户端那边传过的停止信号&#xff0c;所以服务器也就跟着客户端停止运行了&#xff0c;我们可以使用 try {socket.shutdownOutput();} catch (IOException e…

VSCode安装platformio插件

文章目录 一、安装VSCode二、安装platformio&#xff08;一&#xff09;整理文件夹&#xff08;二&#xff09;整理Python环境&#xff08;三&#xff09;安装platformio 三、创建ESP8266项目四、使用命令行创建项目五、创建项目太久怎么办六、参考链接 一、安装VSCode VSCode…