SpringBoot使用Nacos进行application.yml配置管理

Nacos是阿里巴巴开源的一个微服务配置管理和服务发现的解决方案。它提供了动态服务发现、配置管理和 服务管理平台。Nacos的核心功能包括服务发现、配置管理和动态服务管理,使得微服务架构下的服务治理 变得简单高效。

Nacos的设计基于服务注册与发现、配置管理、动态服务管理等核心功能,通过简单的API和配置,实现了服 务的注册与发现、配置的集中管理和动态更新。Nacos使用Raft协议保证配置的一致性,同时支持多种配置 格式,如properties、yaml等。

目录

一、准备

二、nacos管理application.yml配置

1.nacos上新建命令空间和新建配置

2.SpringBoot项目配置改造

pom文件引入依赖

新建bootstrap.yml文件

原yml文件改造

3.启动类注解

4.使用配置

5.测试


一、准备

首先需要在本地电脑上进行Nacos服务部署,默认端口是8848,部署成功之后,就可以去浏览器输入localhost:8848进入nacos管理平台。

二、nacos管理application.yml配置

1.nacos上新建命令空间和新建配置

首先,新建命名空间(如已存在则忽略),注意:命名空间ID可不填,不填则自动生成:

然后,进到nacos的管理页面,在Nacos控制台的左侧导航栏进入配置列表,转到“配置管理”页面,点击“+”来添加一个新的配置。

  • Data ID:统一按照这个格式来: 服务名 - 环境 . 后缀名。主要是因为后面要导入的bootstrap.yaml Spring默认的读取格式就是这样的。 
  • Group:分组可以自定义,没有需求可以选择默认分组DEFAULT_GROUP。
  • 命名空间:设置的命名空间ID。
  • 配置格式:yaml。

在配置内容区域,输入你想要暴露给Spring Boot应用的配置信息。可以从SpringBoot获取yml配置信息,将需要配置到config的信息复制配置到配置内容中。

至此,nacos侧配置项已完成,接下来进行SpringBoot项目配置改造。

2.SpringBoot项目配置改造

pom文件引入依赖

首先修改Spring Boot项目的pom.xml文件,在pom.xml文件中添加Nacos Config和Nacos Discovery的依赖。

<!--nacos配置管理依赖-->
<dependencies>  <!-- Nacos Config -->  <dependency>  <groupId>com.alibaba.cloud</groupId>  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>  <version>2021.1</version>  </dependency>  <!-- Nacos Discovery -->  <dependency>  <groupId>com.alibaba.cloud</groupId>  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>  <version>2021.1</version>  </dependency>  
</dependencies>
<!--spring cloud从2021.0.5版本起,Spring Cloud将不再默认启用bootstrap,需要手动添加依赖。不引入bootstrap.properties/yml不生效-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

新建bootstrap.yml文件

Spring引入了一种新的配置文件:bootstrap.yaml。它的读取流程如下:启动项目 --> 读取bootstrap.yaml文件 --> 找到nacos中,对应的配置文件 --> 读取本地 application.yaml文件 ---> 创建容器 加载bean ...

因此,我们需要在bootstrap.yml文件中配置Nacos服务器地址和命名空间等信息,在spring中nacos配置中心的配置前缀是 spring.cloud.nacos.config。

spring:  application:  name: demo-app  cloud:  nacos:  discovery:  server-addr: localhost:8848 # Nacos服务地址  namespace: your-namespace-id # Nacos命名空间ID  config:  server-addr: localhost:8848 # Nacos作为配置中心地址  namespace: your-namespace-id # Nacos命名空间ID  group: your-group # 配置分组名称  data-id: your-data-id # 配置ID,通常与spring.application.name相同  extension-configs:  - data-id: another-data-id # 另一个配置ID  group: ANOTHER_GROUP # 另一个配置分组名称refresh: true  file-extension: yaml # 配置文件格式,默认为properties

或在bootstrap.properties文件中配置Nacos服务器地址和命名空间等信息

# bootstrap.properties  
spring.cloud.nacos.config.server-addr=127.0.0.1:8848  
spring.cloud.nacos.config.namespace=your-namespace  
spring.cloud.nacos.config.group=DEFAULT_GROUP  
spring.cloud.nacos.config.data-id=your-data-id  
spring.cloud.nacos.config.extension-configs[0].data-id=another-data-id  
spring.cloud.nacos.config.extension-configs[0].group=ANOTHER_GROUP  
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

然后,新建两个文件bootstrap-dev.yaml和bootstrap-prod.yaml,文件内容如下,两个文件内容格式是一样的。

spring:  cloud:  nacos:  discovery:  server-addr: localhost:8848 # Nacos服务地址  namespace: your-namespace-id # Nacos命名空间ID  group: your-group # 配置分组名称  config:  server-addr: localhost:8848 # Nacos作为配置中心地址  namespace: your-namespace-id # Nacos命名空间ID  group: your-group # 配置分组名称  

在Nacos的配置中,discovery和config是两个核心组件,它们各自承担着不同的职责。

(1)Discovery(服务发现):

Discovery的主要作用是实现服务的自动注册与发现。当服务提供者启动后,它会自动将自己的服务信息注册到Nacos中。而服务消费者则可以通过Nacos查询和发现可用的服务提供者。这样,服务消费者就能够动态地获取到服务提供者的网络位置(如IP和端口),从而实现服务的调用。

服务发现在微服务架构中非常重要,因为它允许服务之间动态地相互发现和通信,而无需硬编码服务地址。这使得服务能够更灵活地部署和扩展,同时也提高了系统的可用性和容错性。

(2)Config(配置管理):

Config的主要作用是实现配置信息的集中管理和动态更新。在微服务架构中,通常会有许多服务共享一些公共的配置信息,如数据库连接信息、缓存配置等。Config允许将这些配置信息统一存储在Nacos中,并通过配置中心进行管理和分发。当配置信息发生变化时,Config能够实时地将最新的配置推送给服务消费者,从而实现配置的动态更新。

配置管理在微服务架构中同样非常重要,因为它允许开发人员在不重启服务的情况下更新配置信息。这大大提高了系统的灵活性和可维护性,同时也降低了运维成本。

(3)区别:

  • 服务发现(Discovery) 专注于服务的注册与发现,解决的是服务之间的通信问题。它使得服务能够动态地发现和调用其他服务,而无需硬编码服务地址。
  • 配置管理(Config) 专注于配置信息的集中管理和动态更新,解决的是配置信息的共享和更新问题。它允许开发人员在不重启服务的情况下实时更新配置信息,从而提高了系统的灵活性和可维护性。

原yml文件改造

可以保留程序启动端口。

server:port:1839

3.启动类注解

在Spring Boot启动类上添加 @EnableDiscoveryClient 和 @EnableConfigServer 注解,开启服务发现和配置管理功能。

@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigServer
public class YourApplication {public static void main(String[] args) {SpringApplication.run(YourApplication.class, args);}
}

4.使用配置

在Spring Boot应用中,可以直接通过 @Value 或 @ConfigurationProperties 注解注入Nacos中的配置。@ConfigurationProperties和@Value注解用于获取配置文件中的属性定义并绑定到Java Bean或属性中

通过@Value(“${xxxx}”)可以获取属性文件中对应的值,但是如果属性文件中没有这个属性,则会报错。可以通过赋予默认值解决这个问题,如@Value(“${xxxx:yyyy}”)。

@ConfigurationProperties注解对属性绑定遵循relaxed bind rule【暂且翻译为松散绑定规则】,并不需要精确匹配。所谓的宽松绑定原则是指:并不是 JavaBean 中的属性必须要和配置文件中的一致才能绑定数据,context-path 也能绑定到 contextPath 属性上。比如对属性【app.username】,通过【app.userName】、【app.user-name】、【app.user_name】、【app.USER_NAME】、【app.USER-NAME】等都可匹配,我们可理解为模糊匹配。

@RestController
public class ConfigController {@Value("${your.config.key}")private String configValue;@GetMapping("/config")public String getConfig() {return configValue;}
}
@Data  // 需要提供默认的构造函数,以及get/setter方法
@ConfigurationProperties("my.service")
public class MyProperties {// 我们可以简单地用一个值初始化一个字段来定义一个默认值private boolean enabled = true;private InetAddress remoteAddress;private final Security security = new Security();@Datapublic static class Security {private String username;private String password;// 如果这个属性配置的话,默认是“USER”private List<String> roles = new ArrayList<>(Collections.singleton("USER"));}
}

在配置文件中进行如下配置,

my:service:enabled: trueremoteAddress: 127.0.0.1security:username: csxpassword: passwoedroles:- role1- role2
your:config:key:ccvvv

5.测试

最后,可以尝试启动项目程序,看看是否能启动成功。如果启动成功则说明成功了。

通过整合Nacos,Spring Boot项目能够轻松实现配置的动态管理和服务的自动发现。Nacos的简单易用和强大的功能使其成为微服务架构中不可或缺的一部分。通过本文的介绍和示例代码,读者应该能够掌握Spring Boot与Nacos的集成方法,并在实际项目中高效利用Nacos进行服务配置管理。

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

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

相关文章

STM32F103单片机HAL库串口通信卡死问题解决方法

在上篇文章 STM32F103单片机使用STM32CubeMX创建IAR串口工程 中分享了使用cubeMX直接生成串口代码的方法&#xff0c;在测试的过程中无意间发现&#xff0c;串口会出现卡死的问题。 当串口一次性发送十几个数据的时候&#xff0c;串口感觉像卡死了一样&#xff0c;不再接收数据…

selenium自动爬虫工具

一、介绍selenium爬虫工具 selenium 是一个自动化测试工具&#xff0c;可以用来进行 web 自动化测试、爬虫 selenium 本质是通过驱动浏览器&#xff0c;完全模拟浏览器的操作&#xff0c;比如跳转、输入、点击、下拉等&#xff0c;来拿到网页渲染之后的结果&#xff0c;可支持…

Unity开发数字孪生项目

前言&#xff1a;记录下自己用Unity开发数字孪生项目&#xff0c;所用到的知识点、功能点以及对项目认知总结&#xff0c;当然还有开发过程中所遇到的坑。此篇博客也是会随时进行更新。 &#x1f60a;屏幕前看到此片文章的开发者们在此类项目开发过程中少走些弯路&#xff0c;希…

node利用路由搭建web实例

npm init npm i express body-parser cookie-parser 封装web实例 搭建路由 导出web 应用实例注册

硬件设计 | Altium Designer软件PCB规则设置

基于Altium Designer&#xff08;24.9.1&#xff09;版本 嘉立创PCB工艺加工能力范围说明-嘉立创PCB打样专业工厂-线路板打样 规则参考-嘉立创 注意事项 1.每次设置完规则参数都要点击应用保存 2.每次创建PCB&#xff0c;都要设置好参数 3.可以设置默认规则&#xff0c;将…

WebDAV服务不能上传大文件,文件超过50M报错[0x800700DF]怎么办?

这个问题需要分别从服务端和客户端解决。 1.Windows客户端 解除50M文件限制&#xff0c;Windows访问Webdav服务时&#xff0c;大于50M文件提示错误[错误:0x800700DF] 部署了webdav&#xff0c;Windows10映射网络磁盘&#xff0c;传输文件超过大约50MB的文件会弹出“0x800700…

安全基础学习-keil调试汇编代码

初始目的是为了通过汇编编写CRC功能。 但是基础为0&#xff0c;所以目前从搭建工程开始记录。 大佬绕路。 &#xff08;一&#xff09;创建项目 1. 新建项目 打开 Keil uVision。选择 Project -> New uVision Project 创建一个新项目。选择你的目标设备&#xff08;如 AR…

安装qt 5.15.2笔记

撰文是2024年12月 最终实现了 1、用梯子下载了离线包5.14.2&#xff0c;最后没用 2、用内地镜像在线安装5.15.2&#xff0c;3分钟装完 正文开始&#xff0c;qt官方简称官方。 官方包官方自5.15.X起&#xff0c;不再提供的exe/run安装包https://download.qt.io/archive/qt/ …

Redis Java 集成到 Spring Boot

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;Redis &#x1f4da;本系列文章为个人学习笔…

麒麟信安推出支持信创PC的新一代云桌面方案,助力政务信创高效安全运维

12月11日&#xff0c;在第二届国家新一代自主安全计算系统产业集群融通生态大会上&#xff0c;麒麟信安发布了支持信创PC的新一代云桌面方案&#xff0c;该方案是基于国际TCI架构实现国产PC机云化纳管在国内的首次发布&#xff0c;并与银河麒麟桌面操作系统、长城国产PC整机实现…

网络原理04

可靠传输&#xff0c;是TCP最核心的特性 可靠传输不是说数据100%传输给接收方了 1&#xff09;发送方发出数据后&#xff0c;能过知道接收方是否收到数据 2&#xff09;一旦发现对方没收到&#xff0c;可以通过一定的方法”补救” 1. 确认应答 发送方&#xff0c;把数据已…

微信小程序5-图片实现点击动作和动态加载同类数据

搜索 微信小程序 “动物觅踪” 观看效果 感谢阅读&#xff0c;初学小白&#xff0c;有错指正。 一、功能描述 a. 原本想通过按钮加载背景图片&#xff0c;来实现一个可以点击的搜索button&#xff0c;但是遇到两个难点&#xff0c;一是按钮大小调整不方便&#xff08;网上搜索…

“切片赋值”创建列表批量操作“新”方法(Python)

[start:end]切片赋值&#xff0c;扩展了list批量增减元素的操作能力。 (笔记模板由python脚本于2024年12月06日 15:07:56创建&#xff0c;本篇笔记适合研python基础的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;…

Unraid实现相册同步与展示的方案探讨

背景&#xff1a;Unraid作为一个NAS系统&#xff0c;能够实现基本的NAS文件管理功能&#xff0c;但是不提供额外的功能如影音、同步、办公、和内网穿透等&#xff0c;这些在其他的NAS产品如群晖、绿联、威联通等都是提供支持的。然而unraid也有其他方案&#xff0c;即通过特别方…

常见的网络攻击手段

IP 欺骗 IP 是什么? 在网络中&#xff0c;所有的设备都会分配一个地址。这个地址就仿佛小蓝的家地址「多少号多少室」&#xff0c;这个号就是分配给整个子网的&#xff0c;「室」对应的号码即分配给子网中计算机的&#xff0c;这就是网络中的地址。「号」对应的号码为网络号…

印闪网络:阿里云数据库MongoDB版助力金融科技出海企业降本增效

客户背景 上海印闪网络科技有限公司&#xff0c;于2017年1月成立&#xff0c;投资方包括红杉资本等多家国际知名风投公司。公司业务聚焦东南亚普惠金融&#xff0c;常年稳居行业头部。创始团队来自腾讯&#xff0c;中国团队主要由运营、风控及产研人员组成&#xff0c;核心成员…

51c嵌入式~单片机~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12362395 一、不同的电平信号的MCU怎么通信&#xff1f; 下面这个“电平转换”电路&#xff0c;理解后令人心情愉快。电路设计其实也可以很有趣。 先说一说这个电路的用途&#xff1a;当两个MCU在不同的工作电压下工作&a…

Java 基础知识——part 1

1.目前Java平台有三种版本&#xff1a; Java SE&#xff1a;用于开发桌面应用程序 Java EE&#xff1a;用于编写企业级应用程序 Java ME&#xff1a;用于开发设备应用程序 2.Applet可嵌入Web文档的一种小型程序&#xff0c;因网络传输速度关系都很短小 3.Appilication&…

嵌入式驱动开发详解6(RTC)

文章目录 前言RTC简介RTC驱动分析RTC驱动框架RTC驱动实现 RTC应用后续 前言 实时时钟是很常用的一个外设&#xff0c;通过实时时钟我们就可以知道年、月、日和时间等信息。 因此在需要记录时间的场合就需要实时时钟&#xff0c;可以使用专用的实时时钟芯片来完成此功能&#x…

传输层7——TCP拥塞控制(重点!!!)

目录 一、认识拥塞控制 1、什么叫做拥塞&#xff1f; 2、拥塞的特点 3、流量控制 VS 拥塞控制 二、TCP如何防止拥塞&#xff1f; 1、慢开始 2、拥塞避免 3、3重复确认 和 快重传算法 4、快恢复算法 5、总结 三、主动队列管理AQM 1、技术背景 2、AQM思 想和实现策略…