【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置


🐌个人主页: 🐌 叶落闲庭

💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


Nacos

  • 一、nacos实现配置管理
    • [1.1 统一配置管理](#1.1 统一配置管理)
    • [1.1 nacos完成配置管理](#1.1 nacos完成配置管理)
  • 二、微服务配置拉取
    • [2.1 引入Nacos的配置管理客户端依赖](#2.1 引入Nacos的配置管理客户端依赖)
    • [2.2 在resource目录添加引导文件bootstrap.yml](#2.2 在resource目录添加引导文件bootstrap.yml)
    • [2.3 验证(读取nacos中的配置信息)](#2.3 验证(读取nacos中的配置信息))
  • 三、实现配置热更新
    • [3.1 通过@Value注解注入,结合@RefreshScope](#3.1 通过@Value注解注入,结合@RefreshScope)
    • [3.2 通过@ConfigurationProperties注入,自动刷新](#3.2 通过@ConfigurationProperties注入,自动刷新)
  • 四、多环境配置
    • [4.1 服务名-spring.profile.actie.yaml,环境配置](#4.1 [服务名]-[spring.profile.actie].yaml,环境配置)
    • [4.2 服务名.yaml,多环境共享,默认配置](#4.2 [服务名].yaml,多环境共享,默认配置)
    • [4.5 本地配置](#4.5 本地配置)

一、nacos实现配置管理

1.1 统一配置管理

在微服务搭建中,每个微服务中的业务都需要去完成数据库查询,并且服务之间还会完成相互调用,而要完成相互调用,需要将每个服务都注册到服务中心,消费者就可以从服务中心完成注册发现实现服务获取和负载均衡,完成远程调用,随着服务的增多,可能会有数十上百上千条这种情况,这时就需要对配置文件进行修改,这个配置文件可能跟数十上百上千条微服务都有关系,这时就需要逐个去修改配置,会非常麻烦,而且在配置完后,还需要对每个服务进行重启,而进行统一配置管理后只需要对一个配置文件进行修改即可,通过配置管理服务就可以实现在修改完配置文件后不需要重启服务就可以使用,配置管理服务是通过在服务启动时先去读取配置管理服务上的配置,再和本地的配置进行结合作为完整配置进行使用



1.1 nacos完成配置管理

  • 在nacos中添加配置信息:
  • 填写配置信息:

  • 发布:


二、微服务配置拉取

统一配置完成后,在微服务项目启动时,就需要对该配置进行拉取,即项目启动时,要先读取nacos中的配置文件,那么就需要获取nacos的地址,而nacos的地址在本地配置文件中,要想提前知道nacos地址,就需要创建一个名为bootstrap.yml的文件,这个文件的优先级比本地配置文件properties.yml文件高很多,所以将nacos地址的相关配置加在bootstrap.yml中就可以提前加载nacos地址从而访问nacos配置文件了。

2.1 引入Nacos的配置管理客户端依赖

xml 复制代码
<!--nacos的配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.2 在resource目录添加引导文件bootstrap.yml

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

2.3 验证(读取nacos中的配置信息)

  • nacos的配置信息
yaml 复制代码
pattern:
    dateformat: yy-MM-dd HH:mm:ss
  • 在userservice的Controller中读取当前时间信息,通过该配置展现出来
java 复制代码
@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));
    }
}

三、实现配置热更新

3.1 通过@Value注解注入,结合@RefreshScope

java 复制代码
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
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));
    }
}

3.2 通过@ConfigurationProperties注入,自动刷新

java 复制代码
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}
java 复制代码
@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()));
    }
}

四、多环境配置

4.1 服务名-spring.profile.actie.yaml,环境配置

yaml 复制代码
pattern:
    dateformat: yy/MM/dd HH:mm:ss
    name: 环境配置dev

4.2 服务名.yaml,多环境共享,默认配置

yaml 复制代码
pattern:
    envSharedValue: 环境共享属性值
    name: 环境共享属性值default

4.5 本地配置

yaml 复制代码
pattern:
  name: 本地环境local

优先级:服务名-spring.profile.actie.yaml > 服务名.yaml > 本地配置

相关推荐
ai生成式引擎优化技术6 分钟前
WSaiOS:面向认知资产与工程化认知流程的智能操作系统架构
python·架构·django·virtualenv·pygame
大侠锅锅23 分钟前
第 1 篇:开篇|物联网边缘计算的真实挑战与云边端架构全景
物联网·架构·边缘计算
国科安芯8 小时前
ASC4T245S分组双向控制架构深度解析:独立DIR/OE控制、QFN16封装与混合方向总线桥接
单片机·嵌入式硬件·物联网·fpga开发·架构·risc-v
派叔9 小时前
老字号营销服务商技术解构:三类方案的架构逻辑与选型评估
大数据·人工智能·搜索引擎·架构·产品运营·流量运营
宠友信息11 小时前
多端数据互通场景下Spring Boot仿小红书源码结构设计
数据库·spring boot·redis·缓存·架构
韩楚风12 小时前
【参天引擎】Cantian 服务端框架全景解析:进程架构、模块组成与交互关系
数据库·mysql·架构·cantian
Sinclair12 小时前
认识安企CMS-核心功能亮点
架构·开源
“码”力全开12 小时前
AI视频分析误报优化完整流程
算法·架构·边缘计算
JouYY14 小时前
聊一下知识答疑Agent的“层次聚类”流程
架构·llm·agent
Kel14 小时前
MCP 传输链路全链路拆解:从字节流到协议栈的四层架构之旅
人工智能·设计模式·架构