2024.5.22 关于 SpringCloud —— Nacos 配置管理

目录

Nacos 配置统一管理

Nacos 配置热部署 

Nacos 多环境配置共享

配置优先级


Nacos 配置统一管理


实例理解

  • 我们想要利用 Nacos 在 user-service 的 application.yml 配置文件中新增配置项
  • 此处我们将新增配置日期格式为 yyyy-MM-dd HH:mm:ss
  • 下图为新增 Nacos 配置统一管理后的配置获取步骤

1)在 Nacos 管理平台中新建配置信息

2)在 user-service 的 pom.xml 中引入 Nacos 配置管理客户端依赖

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

3)在 userservice 中的 resource 目录添加一个 bootstrap.yml 文件

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev # 开发环境 dev
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos地址
      config:
        file-extension: yaml # 指定配置文件类型

注意:

  • bootstrap.yml 文件为引导文件,其优先级高于 application.yml 
  • 所以我们还需注释掉 application.yml 中重复出现的内容 !

结果验证

1)在 user-service 的 UserController 中创建编写下方代码

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Value("${pattern.dateformat}")
    private String dateformat;

    @GetMapping("/now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
}
  • 通过 @Value 注解获取配置文件中的 pattern.dateformat 配置项,即日期格式

2)重启 UserApplication,在浏览器的 url 框中输入对应地址,获取当前的日期时间

  • 观察此处日期时间的输出格式,与我们在 Nacos 管理平台新增的配置项日期格式一致

小总结

  • 将配置交给 Nacos 管理的三大步骤
  1. 在 Nacos 管理平台中添加配置文件
  2. 在微服务中引入 Nacos 的 config 依赖
  3. 在微服务中添加 bootstrap.yml,配置 Nacos 地址、当前环境、服务名称、文件后缀名,这些决定了程序启动时去 Nacos 读取哪个文件

Nacos 配置热部署 

  • Nacos 中的配置文件变更后,微服务无需重启变可感知

方式一

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


方式二

  • 使用 @ConfigurationProperties 注解
  • 相较于方式一,此处更推荐方式二

1)在 user-service 中新创建一个 PatternProperties 类

package cn.itcast.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

2)仅需细微改动 UserController 中的代码,让其注入 PatternProperties Bean 对象即可

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private PatternProperties properties;

    @GetMapping("/now")
    public String now() {
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
    }
}

3)重启 UserApplication 即可实现配置热部署


结果验证

  • 此处我们希望通过修改上文已配置的日期格式,来检测是否已成功实现配置热更新

1)在 nacos 配置管理中选择 userservice-dev.yaml 并点击编辑

2)修改配置项,即修改日期格式

3)无需重启 user-service ,直接在浏览器中输入对应 url 路径

  • 由上图可知,此处我们已成功实现配置热更新

小总结

  • Nacos 配置更改后,微服务实现热更新有两种方式
  1. 通过 @Value 注解注入,结合 @RefreshScope 注解来刷新
  2. 通过 @ConfigurationProperties 注入,自动刷新(推荐)

注意事项

  • 不是所有的配置都适合放到配置中心,维护起来比较麻烦
  • 建议将一些关键数据,需要运行时调整的参数放到 Nacos 配置中心,一般都是自定义配置

Nacos 多环境配置共享

  • 微服务启动时会从 Nacos 中读取多个配置文件
  1. [spring.application.name]-[spring.profiles.active].yaml,例如 userservice-dev.yaml
  2. [spring.application.name].yaml,例如 userservice.yaml

注意:

  • 无论 profile 如何变化,[spring.application.name].yaml 文件一定会被加载
  • 因此当我们进行多环境共享配置时,可直接写入该文件中

实例理解

  • 我们想要利用 Nacos 在 user-service 的 application.yml 配置文件中新增配置项

1)在 Nacos 管理平台中新建配置信息

2)与区别上文所配置的 userservice-dev.yaml


结果验证

1)修改 user-service 中的 PatternProperties 类,让其能够获取到 envShareValue

package cn.itcast.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
    private String envShareValue;
}

2)在 user-service 的 UserController 类中,添加下方代码

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private PatternProperties properties;

    @GetMapping("/prop")
    public PatternProperties properties() {
        return properties;
    }
}

3)我们将 UserApplication 8081 的环境设为 dev,并将其重新启动

4)我们将 UserApplication 8082 的环境设为 test,并将其重新启动

5)在浏览器中输入对应的 url 路径访问 UserApplication 8081 的接口

  • 如上图所示,8081 成功获取到 dateformat 和 envShareValue 这两个配置项的值
  • 因为 8081 的环境为 dev,所以能够加载 userservice-dev.yaml 中的配置项

6)在浏览器中输入对应的 url 路径访问 UserApplication 8082 的接口

  • 如上图所示,8082 仅获取到 envShareValue 这两个配置项的值
  • 因为 8082 的环境为 test,因此无法加载 userservice-dev.yaml 中的配置项

配置优先级


小总结

  • 微服务会从 Nacos 中读取的配置文件
  1. [服务名]-[spring.profile.active].yaml,环境配置
  2. [服务名].yaml,默认配置,多环境共享
  • 关于优先级
  1. [服务名]-[环境].yaml > [服务名].yaml > 本地配置

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茂大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值