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

news2024/11/15 21:43:13

文章目录

    • 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: 9501
  servlet:
    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: account
  cloud:
    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: account
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-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 项目中。

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

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

相关文章

2024新版阿里云服务器价格计算器,报价不求人自己查

阿里云服务器价格计算器&#xff0c;鼠标选择云服务器ECS实例规格、地域、系统盘、带宽及购买时长即可一键计算出精准报价&#xff0c;报价不求人使用计算器自己查&#xff0c;报价清单支持下载。阿里云服务器网aliyunfuwuqi.com分享阿里云服务器价格计算器链接地址&#xff1a…

Dockerfile构建Nginx访问说明

Dockerfile使用情况 20210903 Dockerfile ,Nginx 参考地址&#xff1a;https://yeasy.gitbook.io/docker_practice/image/build 编写简单Dockerfile 在一个空白目录中&#xff0c;建立一个文本文件&#xff0c;并命名为 Dockerfile&#xff1a; $ mkdir mynginx $ cd myngin…

Blender教程(基础)-切分工具-11

再菜单栏左侧、鼠标左键长按切割工具弹出选项&#xff0c;选择切分工具即可找到切分工具。 一、切割使用 A键全选需要切分的物体&#xff0c;再选择切分后再操作物体上单机长按鼠标左键划分切分范围 选择好切分位置后点击确定如下图所示&#xff1a;Enter键确认切分 二、…

Hugging Face推出自定义AI聊天Assistants;谷歌推出图像生成工具 ImageFX

&#x1f989; AI新闻 &#x1f680; 谷歌推出图像生成工具 ImageFX 摘要&#xff1a;谷歌在 Imagen 2 的基础上推出新的图像生成工具 ImageFX&#xff0c;通过简单的文字提示可以生成高质量图像。该工具包含了提示界面&#xff0c;让用户可以快速尝试创作和想法的相邻维度。…

LLM之Agent(十一)| 多智能体框架CrewAI与AutoGen相比

基于LLM构建的Agent中有一个明显的现象就是多智能体体系结构的表现要超越单智能体&#xff0c;即使单智能体使用无可挑剔的提示策略。本文将探索另一个有趣的多智能体框架——CrewAI。 一、CrewAI整体优势 CrewAI可以应用在生成环境中。它在发言人的反应和编排上牺牲了一点灵活…

kubecolor让kubelet更好看

kubecolor让kubelet更好看 默认情况下kubectl输出都是白色,在列特别多的情况下比较难分清楚具体是哪个对应哪个. 发现kubecolor可以完美解决这样的问题. 1. 安装kubecolor mkdir kubecolor cd kubecolor wget https://github.com/kubecolor/kubecolor/releases/download/v0.…

uniapp 项目请求接口千万别写死

我接手我徒弟的项目发现有一个请求接口是写死的。比如这种 config.baseUrlhttps://www.test1.cn/这样写虽然没有问题&#xff0c;但是如果遇到上传或下载接口 而且每个文件都有 这么多文件都写死 不利于维护。 下面我优化的是这样 新建一个config/index.js 引入方法 /config …

c# Get方式调用WebAPI,WebService等接口

/// <summary> /// 利用WebRequest/WebResponse进行WebService调用的类 /// </summary> public class WebServiceHelper {//<webServices>// <protocols>// <add name"HttpGet"/>// <add name"HttpPost"/>// …

Jasperreport 生成 PDF之省纸模式

省纸模式顾名思义就是节省纸张&#xff0c;使用 Jasper 去生成 PDF 的时候如果进行分组打印的时候&#xff0c;一页 A4 纸只会打印一组数据。这种情况下&#xff0c;如果每组数据特别少&#xff0c;只有几行&#xff0c;一页 A4 纸张根本用不了&#xff0c;就会另起一页继续打印…

springboot并mybatis入门启动

pom.xml,需要留意jdk的版本&#xff08;11&#xff09;和springboot版本要匹配&#xff08;2.7.4&#xff09;&#xff0c;然后还要注意mybatis启动l类的版本&#xff08;2.2.2&#xff09; <?xml version"1.0" encoding"UTF-8"?> <project xm…

【国产MCU】-CH32V307-GPIO控制:输入与输出

GPIO控制:输入与输出 文章目录 GPIO控制:输入与输出1、GPIO简单介绍2、驱动API介绍3、GPIO配置代码实现3.1 GPIO配置为输出3.2 GPIO配置为输入CH32V307的GPIO口可以配置成多种输入或输出模式,内置可关闭的上拉或下拉电阻,可以配置成推挽或开漏功能。GPIO口还可以复用成其他…

设计模式——2_1 命令(Command)

文章目录 定义图纸一个例子&#xff1a;空调和他的遥控器只有控制面板的空调遥控器可以撤销的操作 碎碎念命令和Runnable命令和事务 定义 把请求封装成一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff0c;对请求排队或记录请求日志&#xff0c;以及支持…

2024美国数学建模竞赛A题完整版思路+代码+数据+后续高质量参考论文

2024 MCM 问题A: 资源 用性和性 &#xff08;完整版见文末&#xff09; 题目翻译&#xff1a; 虽然有些动物物种存在于通常的雌雄两性之外&#xff0c;但大多数物种基本上是雌性或雄性。尽管许 多物种在出生时呈现1:1的性别比&#xff0c;但其他物种则偏离了均等的性别比。这…

jsp粉丝社区系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 粉丝社区系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

在Vue中如何构建复杂表单?

概述 很有可能&#xff0c;在我们的软件工程旅程中&#xff0c;我们至少要构建一次复杂的表单。本文将介绍如何创建一个复杂的表单&#xff0c;该表单可以使用一些Vue特性(如v-for和v-model)逐步增强。它还提供了一些基本的Vue核心功能的复习&#xff0c;这些功能将在您日常使…

Swift 入门之自定义类型的模式匹配(Pattern Matching)

概览 小伙伴们都知道 Swift 是一门简洁、类型安全、极富表现力以及“性感迷人”的编程语言。 和大多数语言一样&#xff0c;在 Swift 中也有一些隐藏着的、不为人知的宝藏特性。利用它们我们可以极大增加撸码的愉悦和成就感。 其中&#xff0c;模式匹配&#xff08;Pattern …

Linux---动静态库

动静态库的相关概念 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库&#xff08;.so&#xff09;&#xff1a;程序在运行的时候才去链接动态库的代码&#xff0c;多个程序共享使用库的…

【HarmonyOS】鸿蒙开发之ArkTs初步认识——第2.1章

ArkTs简介 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。 以下图可以展示Js&#xff0c;TS&#xff0c;ArkTs的关系 ArkTs基础语…

比收费还好用,6个自学python必看网站

今天给大家分享几个自学python经常用到的网站&#xff0c;非常实用&#xff0c;建议收藏&#xff01; 1.中文版官方教程 https://docs.python.org/zh-cn/3/tutorial/errors.html#defining-clean-up-actions 你可以从这里下载Python、使用、学习Python。官方文档自然是最权威的…

【vue】报错 Duplicate keys detected 解决方案

错误描述&#xff1a;Duplicate keys detected. This may cause an update error.错误直译&#xff1a;检测到重复的键。这可能会导致错误。错误原因&#xff1a;有相同父元素的多个子元素的v-for有相同的key值。 解决方法&#xff1a; return:{dataList:[{name:张三&#xf…