当前位置: 首页 > news >正文

【Spring实战】33 Spring Boot3 集成 Nacos 配置中心

文章目录

    • 1. 配置中心定义
    • 2. 解决哪些问题
    • 3. 常用的配置中心
    • 4. 使用示例
      • 1)没引入 Nacos 配置中心
      • 2)引入依赖
      • 3)配置Nacos连接信息
      • 4)在 Nacos 上配置属性
      • 5)在 Spring Boot 中使用配置
      • 6)启动服务&验证
      • 7)实时更新配置
    • 5. 代码参考
    • 结语

在上一篇 【Spring实战】32 Spring Boot3 集成 Nacos 服务注册中心 文章中,我们介绍了 Nacos 的定义、背景、功能和特性,并通过简单示例演示了如何在 Gateway 网关中应用。但是在微服务架构中,配置中心也是一个非常重要的组件,它可以帮助我们集中管理应用的配置信息。Nacos 作为一个优秀的配置中心工具,为微服务提供了灵活且可靠的配置管理。本文将介绍如何在 Spring Boot 项目中集成 Nacos 配置中心,实现统一的配置管理。

1. 配置中心定义

在 Spring 框架中,配置中心是指一种集中式管理应用程序配置信息的机制。它的目标是通过集中存储和管理配置,实现配置的动态更新、版本管理和统一管理,以提高系统的灵活性、可维护性和可扩展性。

2. 解决哪些问题

配置中心通常用于解决以下问题:

  • 集中管理配置:

    将应用程序的配置集中存储在一个地方,便于管理和维护,避免配置散落在各个应用实例中

  • 动态更新配置:

    允许在运行时动态修改配置,无需重启应用,从而提高系统的可用性和灵活性

  • 版本管理:

    提供配置的版本管理,方便进行配置的回滚、比较和历史查看

  • 统一配置管理:

    统一管理所有微服务的配置,确保它们之间的配置一致性,简化系统的部署和维护

3. 常用的配置中心

  • Spring Cloud Config:

    Spring Cloud提供了一个名为Spring Cloud Config的子项目,用于构建分布式系统中的配置服务和客户端。它支持配置文件存储在Git、SVN等版本控制系统中,也可以通过HTTP、JDBC等方式获取配置

  • Nacos:

    Nacos是一个综合性的服务发现和配置管理平台,它可以作为配置中心,支持动态配置管理、服务发现、服务健康监测等功能。Nacos提供了丰富的功能,适用于构建和管理云原生应用

  • Zookeeper:

    Zookeeper是一个分布式的协调服务,也可以用作配置中心。它提供了一个简单的键值存储系统,用于存储和管理配置信息

  • Consul:

    Consul是一个分布式的服务发现和配置管理工具。它支持健康检查、服务注册和发现,同时也可以用作配置中心

4. 使用示例

下面通过一个简单的示例演示 Spring Boot 项目如何使用 Nacos 配置管理中心。

在这里插入图片描述

1)没引入 Nacos 配置中心

定义一个配置文件,配置一个我们用于测试的名字,key 是 koala.user.name value 是 cheney

application.yml

server:port: 9501servlet:context-path: /account
koala:user:name: cheney

写一个 REST 请求,并且使用 Spring 提供的 @Value("${koala.user.name}") 来从配置文件中获取名字

HelloController.java

package com.cheney.koala.account.controller;import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@Value("${koala.user.name}")private String userName;@GetMapping("hello")public String hello() {return String.format("Hello %s", userName);}
}

创建一个普通的 Spring boot 启动类

KoalaAccountApplication.java

package com.cheney.koala.account;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class KoalaAccountApplication {public static void main(String[] args) {SpringApplication.run(KoalaAccountApplication.class, args);}
}

启动服务&验证

访问下面的 URL,然后就可以读取到了我们提前在 application.yml 中配置的名字

http://localhost:9501/account/hello

在这里插入图片描述

这个时候存在一个问题,如果我们需要修改名字的话,那么就需要去修改代码并且重启服务才可以

那么如何解决呢?引入 Nacos 配置中心!

2)引入依赖

继续在上面的 Spring Boot 项目中引入 Nacos 配置中心的依赖。在pom.xml文件中添加如下依赖:

引入了如下配置中心的依赖 spring-cloud-starter-alibaba-nacos-config

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2022.0.0.0-RC1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

3)配置Nacos连接信息

bootstrap.yml 中配置 Nacos 服务器的连接信息

bootstrap.yml

spring:application:name: accountcloud:nacos:discovery:server-addr: 127.0.0.1:8848

其中 127.0.0.1:8848 是实际的 Nacos 服务器地址,account 是 Nacos 命名空间

4)在 Nacos 上配置属性

首先启动 Nacos 服务并登录管理页面

http://localhost:8848/nacos

在这里插入图片描述

点击 配置列表 - 创建配置

在这里插入图片描述

分别输入 Data ID,描述信息,此处我选择了 YAML 其他配置格式也是可以的,然后就是配置内容了

信息填写完成后,点击 发布

在这里插入图片描述

这样一条配置信息就创建好了。可以点击后面的一系列操作按钮进行增删改查操作

5)在 Spring Boot 中使用配置

继续使用上面的 Spring Boot 项目代码,增加一个连接 Nacos 的配置

bootstrap.yml

spring:application:name: accountcloud:nacos:config:server-addr: 127.0.0.1:8848file-extension: yaml

这里配置了 Nacos 的地址 127.0.0.1:8848,已经我们使用的配置文件格式 yaml

6)启动服务&验证

再次访问下面的 URL,然后就可以读取到了我们提前在 Nacos 配置中心中配置的名字

http://localhost:9501/account/hello

在这里插入图片描述

7)实时更新配置

我们在 Nacos 配置中心中修改 koala.user.name 对应名字的值,保存配置。

在这里插入图片描述

点击发布之后,可以看到修改哪里了。然后确认发布,确定,即可。

在这里插入图片描述

然后再次访问下面的 URL,

http://localhost:9501/account/hello

在这里插入图片描述

你会发现,为什么没有显示我们新修改的值呢???它不是实时刷新么。。。。

原因是,如果我们想要实时刷新,则需要在 HelloController 上新加一个 @RefreshScope

在这里插入图片描述

然后我们重启服务,访问 URL

http://localhost:9501/account/hello

在这里插入图片描述

再去将配置中心中 koala.user.name 对应名字的值修改为 cheney,保存配置。

在这里插入图片描述

再次访问 URL

http://localhost:9501/account/hello

在这里插入图片描述

发现可以动态刷新成 Nacos 配置中心中的最新值啦

5. 代码参考

https://gitee.com/cheney09/koala-system

结语

本文我们成功的将 Spring Boot 项目集成了 Nacos 配置中心,实现了动态配置管理。Nacos的优秀特性使得配置的管理变得更加灵活和便捷,适用于各种规模的微服务项目。希望这篇文章能够帮助你顺利地将 Nacos 配置中心引入到你的 Spring Boot 项目中。

相关文章:

【Spring实战】33 Spring Boot3 集成 Nacos 配置中心

文章目录 1. 配置中心定义2. 解决哪些问题3. 常用的配置中心4. 使用示例1&#xff09;没引入 Nacos 配置中心2&#xff09;引入依赖3&#xff09;配置Nacos连接信息4&#xff09;在 Nacos 上配置属性5&#xff09;在 Spring Boot 中使用配置6&#xff09;启动服务&验证7&am…...

ElementUI安装与使用指南

Element官网-安装指南 提醒一下&#xff1a;下面实例讲解是在Mac系统演示的&#xff1b; 一、开发环境配置 电脑需要先安装好node.js和vue2或者vue3 安装Node.js Node.js 中文网 安装node.js命令&#xff1a;brew install node node.js安装完后&#xff0c;输入&#xff1…...

Opencv——图片卷积

图像滤波是尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。 线性滤波是图像处理最基本的方法,它允许我们对图像进行处理,产生很多不同的效果。首先,我们需要一个二…...

项目安全-----加密算法实现

目录 对称加密算法 AES &#xff08;ECB模式&#xff09; AES(CBC 模式)。 非对称加密 对称加密算法 对称加密算法&#xff0c;是使用相同的密钥进行加密和解密。使用对称加密算法来加密双方的通信的话&#xff0c;双方需要先约定一个密钥&#xff0c;加密方才能加密&#…...

只用一台服务器部署上线(宝塔面板) 前后端+数据库

所需材料 工具&#xff1a;安装宝塔面板服务器至少一台、域名一个 前端&#xff1a;生成dist文件&#xff08;前端运行build命令&#xff09; 后端&#xff1a;生成jar包&#xff08;maven运行package命令&#xff09; 准备&#xff1a; 打开宝塔面板&#xff0c;点击进入软…...

《Pandas 简易速速上手小册》第8章:Pandas 高级数据分析技巧(2024 最新版)

文章目录 8.1 使用 apply 和 map 函数8.1.1 基础知识8.1.2 重点案例&#xff1a;客户数据清洗和转换8.1.3 拓展案例一&#xff1a;产品评分调整8.1.4 拓展案例二&#xff1a;地址格式化 8.2 性能优化技巧8.2.1 基础知识8.2.2 重点案例&#xff1a;大型销售数据分析8.2.3 拓展案…...

计算机网络_1.6.2 计算机网络体系结构分层的必要性

1.6.2 计算机网络体系结构分层的必要性 一、五层原理体系结构每层各自主要解决什么问题1、物理层2、数据链路层3、网络层4、运输层5、应用层 二、总结三、练习 笔记来源&#xff1a; B站 《深入浅出计算机网络》课程 本节主要介绍实现计算机网络需要解决哪些问题&#xff1f;以…...

跟着cherno手搓游戏引擎【18】抽象Shader、项目小修改

抽象&#xff1a; Shader.h: #pragma once #include <string>namespace YOTO {class Shader {public:virtual~Shader()default;virtual void Bind()const0;virtual void UnBind()const0;static Shader* Create(const std::string& vertexSrc, const std::string&am…...

每日OJ题_算法_模拟②_力扣495. 提莫攻击

目录 力扣495. 提莫攻击 解析代码 力扣495. 提莫攻击 495. 提莫攻击 难度 简单 在《英雄联盟》的世界中&#xff0c;有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希&#xff08;编者注&#xff1a;寒冰射手&#xff09;进入中毒状态。 当提莫攻击艾希&#xff0c…...

freertos 源码分析二 list链表源码

list.c 一、链表初始化 void vListInitialise( List_t * const pxList ) { pxList->pxIndex ( ListItem_t * ) &…...

Peter算法小课堂—Dijkstra最短路算法

大家好&#xff0c;我们人见人爱、花见花开、车见车爆胎的Peter Pan来啦&#xff0c;hia~hia~hia。今天&#xff0c;我们今天来学习毒瘤的最短路算法啦。啊这……什么是Dijkstra算法&#xff1f;长文警告⚠ 正经点啊 手算样例 大家思考一下&#xff0c;你在手算样例的时候&am…...

Python 读取和写入包含中文的csv、xlsx、json文件

背景 最近在做数据的训练&#xff0c;经常需要读取写入csv、xlsx、json文件来获取数据&#xff0c;在这里做简单总结记录。 ps: 读取和写入中文文件时&#xff0c;需要确保文件的编码格式是正确的。通常情况使用UTF-8编码格式。如果使用其他编码格式可能会导致读取或写入时出…...

【算法】利用递归dfs解决二叉树算法题(C++)

文章目录 1. 前言2. 算法题2331.计算布尔二叉树的值129.求根节点到叶节点数字之和LCR047.二叉树剪枝98.验证二叉搜索树230.二叉搜索树中第K小的元素257.二叉树的所有路径 1. 前言 有关 递归 的相关解释与解题 请看下文&#xff1a; 以汉诺塔理解递归、并用递归解决算法题 对于…...

计算机网络_1.6.1 常见的三种计算机网络体系结构

1.6.1 常见的三种计算机网络体系结构 1、OSI&#xff08;七层协议&#xff09;标准失败的原因2、TCP/IP参考模型3、三种网络体系结构对比 笔记来源&#xff1a; B站 《深入浅出计算机网络》课程 1、OSI&#xff08;七层协议&#xff09;标准失败的原因 &#xff08;1&#xf…...

XML传参方式

export function groupLoginAPI(xmlData) {return http.post(/tis/group/1.0/login, xmlData, {headers: {Content-Type: application/xml,X-Requested-With: AAServer/4.0,}}) }import {groupLoginAPI} from "../api/user"; function (e) { //xml格式传参let groupX…...

Pyecharts炫酷散点图构建指南【第50篇—python:炫酷散点图】

文章目录 Pyecharts炫酷散点图构建指南引言安装Pyecharts基础散点图自定义散点图样式渐变散点图动态散点图高级标注散点图多系列散点图3D散点图时间轴散点图笛卡尔坐标系下的极坐标系散点图 总结&#xff1a; Pyecharts炫酷散点图构建指南 引言 在数据可视化领域&#xff0c;…...

关于爬取所有哔哩哔哩、任意图片、所有音乐、的python脚本语言-Edge浏览器插件 全是干货!

这些都是现成的并且实时更新的&#xff01;从次解放双手&#xff01; 首先有自己的edge浏览器基本上都有并且找到插件选项 1.哔哩哔哩视频下载助手&#xff08;爬取哔哩哔哩视频&#xff09; bilibili哔哩哔哩视频下载助手 - Microsoft Edge Addons 下面是效果&#xff1a; 2.图…...

压力测试工具-Jmeter使用总结

目录 一.前言 二.线程组 三.线程组的组件 四.线程组-HTTP请求 1、JSON提取器 2、XPATH提取器 3、正则表达式提取器 五.线程组-断言 1、响应断言 2、JSON断言 六.创建测试 1.创建线程组 2.配置元件 3.构造HTTP请求 4.添加HTTP请求头 5.添加断言 6.添加查看结果树…...

[cmake]CMake Error: Could not create named generator Visual Studio 16 2019解决方法

配置flycv时&#xff0c;cmake以下代码会报错第二行的错误&#xff0c;网上解决方法为第三行代码 cmake .. -G "Visual Studio 16 2019 Win64" CMake Error: Could not create named generator Visual Studio 16 2019 cmake .. -G "Visual Studio 16 2019"…...

2024美赛数学建模D题思路分析 - 大湖区水资源问题

1 赛题 问题D&#xff1a;大湖区水资源问题 背景 美国和加拿大的五大湖是世界上最大的淡水湖群。这五个湖泊和连接的水道构成了一个巨大的流域&#xff0c;其中包含了这两个国家的许多大城市地区&#xff0c;气候和局部天气条件不同。 这些湖泊的水被用于许多用途&#xff0…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...