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

SpringCloud:Nacos配置管理

目录

1.Nacos配置管理

1.1.统一配置管理

1.1.1.在nacos中添加配置文件

1.1.2.从微服务拉取配置

1.2.配置热更新

1.2.1.方式一

1.2.2.方式二

1.3.配置共享

1)添加一个环境共享配置

2)在user-service中读取共享配置

3)运行两个UserApplication,使用不同的profile

4)配置共享的优先级


1.Nacos配置管理

Nacos除了可以做注册中心,同样可以做配置管理来使用。

1.1.统一配置管理

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。

Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

1.1.1.在nacos中添加配置文件

如何在nacos中管理配置呢?

然后在弹出的表单中,填写配置信息:

注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。

1.1.2.从微服务拉取配置

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。

但如果尚未读取application.yml,又如何得知nacos地址呢?

因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

1)引入nacos-config依赖

首先,在user-service服务中,引入nacos-config的客户端依赖:

<!--nacos配置管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>

2)添加bootstrap.yaml

然后,在user-service中添加一个bootstrap.yaml文件,内容如下:

spring: application: name: userservice # 服务名称 profiles: active: dev #开发环境,这里是dev cloud: nacos: server-addr: localhost:8848 # Nacos地址 config: file-extension: yaml # 文件后缀名

这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。

本例中,就是去读取userservice-dev.yaml

3)读取nacos配置

在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:

完整代码:

import cn.itcast.user.pojo.User; import cn.itcast.user.service.UserService; 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.*; ​ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; ​ @Slf4j @RestController @RequestMapping("/user") public class UserController { ​ @Autowired private UserService userService; ​ @Value("${pattern.dateformat}") private String dateformat; @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); } // ...略 }

在页面访问,可以看到效果:

1.2.配置热更新

我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新

要实现配置热更新,可以使用两种方式:

1.2.1.方式一

在@Value注入的变量所在类上添加注解@RefreshScope:

1.2.2.方式二

使用@ConfigurationProperties注解代替@Value注解。

在user-service服务中,添加一个类,读取patterrn.dateformat属性:

import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; ​ @Component @Data @ConfigurationProperties(prefix = "pattern") public class PatternProperties { private String dateformat; }

在UserController中使用这个类代替@Value:

完整代码:

import cn.itcast.user.config.PatternProperties; import cn.itcast.user.pojo.User; import cn.itcast.user.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; ​ import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; ​ @Slf4j @RestController @RequestMapping("/user") public class UserController { ​ @Autowired private UserService userService; ​ @Autowired private PatternProperties patternProperties; ​ @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat())); } ​ // 略 }

1.3.配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml

  • [spring.application.name].yaml,例如:userservice.yaml

[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

下面我们通过案例来测试配置共享

1)添加一个环境共享配置

我们在nacos中添加一个userservice.yaml文件:

2)在user-service中读取共享配置

在user-service服务中,修改PatternProperties类,读取新添加的属性:

在user-service服务中,修改UserController,添加一个方法:

3)运行两个UserApplication,使用不同的profile

修改UserApplication2这个启动项,改变其profile值:

这样,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。

启动UserApplication和UserApplication2

访问http://localhost:8081/user/prop,结果:

访问http://localhost:8082/user/prop,结果:

可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。

4)配置共享的优先级

当nacos、服务本地同时出现相同属性时,优先级有高低之分:

http://www.jsqmd.com/news/405283/

相关文章:

  • 手表维修如何避坑?2026年深圳泰格豪雅维修推荐与评价,解决非官方服务核心痛点 - 十大品牌推荐
  • CentOS Stream10安装docker ce
  • 如何选择可靠维修点?2026年深圳天梭手表维修推荐与排名,直击服务标准与价格透明痛点 - 十大品牌推荐
  • 2026年国内口碑好的矿物质防火电缆制造商如何选,KVV22控制电缆/KVVP62控制电缆,矿物质防火电缆制造商哪家靠谱 - 品牌推荐师
  • 2026年深圳手表保养推荐:多场景售后深度评价,直击非官方维修与服务质量痛点 - 十大品牌推荐
  • 如何选择可靠手表维修点?2026年深圳手表维修推荐与评价,直击技术资质与配件痛点 - 十大品牌推荐
  • Janus-Pro-7B一文详解:统一多模态模型OCR/视觉问答/文生图全功能解析
  • Matlab根据flac、pfc或其他软件导出的坐标及应力、位移数据再现云图 案例包括导出在f...
  • 2026年深圳斯沃琪手表维修推荐:基于多场景服务评价,直击维修时效与品质核心痛点 - 十大品牌推荐
  • Qwen3-Reranker-0.6B应用指南:优化跨境电商多语言搜索
  • 让OpenClaw接入豆包和OpenAI
  • 深圳香奈儿手表维修哪家强?2026年维修中心推荐与排名,解决服务标准化核心痛点 - 十大品牌推荐
  • 2026年深圳修表店推荐:权威评测聚焦高端腕表维修,解决非官方服务信任痛点 - 十大品牌推荐
  • Qwen3-Reranker-8B提示词工程:如何设计高效指令
  • Pi0具身智能与ChatGPT集成:自然语言控制机器人
  • 如何选择可靠维修点?2026年深圳萧邦手表维修推荐与评测,直击网点覆盖与透明报价痛点 - 十大品牌推荐
  • 2026年深圳万宝龙手表维修推荐:基于多场景服务评价,针对维修质量与便利性痛点 - 十大品牌推荐
  • 方言语音助手基石:Qwen3-ForcedAligner-0.6B区域化适配全攻略
  • 从安装到使用:Xinference-v1.17.1完整教程
  • 如何选择可靠维修点?2026年深圳西铁城手表维修推荐与评测,直击服务透明度痛点 - 十大品牌推荐
  • 文脉定序部署教程:使用Ray Serve部署高并发文脉定序API服务
  • Ollama部署Qwen2.5-VL-7B教程:5分钟搞定多模态AI视觉服务
  • 2026年深圳欧米茄手表维修推荐:多维度评价售后网点,应对技术可靠性与透明度痛点 - 十大品牌推荐
  • Z-Image-Turbo实战:基于YOLOv8的目标检测图像生成
  • D.二分查找-二分答案-最大化最小值——1552. 两球之间的磁力
  • 探伤仪市场新动态:2026年热门供应商盘点,纺织品拉力试验机/2000N弹簧承载力试验机,探伤仪直销厂家排行榜单 - 品牌推荐师
  • 零基础入门SeqGPT-560M:从安装到信息抽取全流程
  • 8GB显存跑大模型:GLM-4-9B-Chat-1M实测分享
  • Z-Image-Turbo惊艳效果展示:8步生成4K商业海报
  • 雯雯的后宫-造相Z-Image-瑜伽女孩部署教程:WSL2环境下的Windows本地快速验证方案