在微服务项目使用和运维中,Nacos作为配置中心使用率很高,很大程度上源于阿里巴巴背书且开源,后面有众多的社区支持讨论。

既然已经使用了Nacos,配置中心必然要能支持动态刷新,即就是修改了部分外部数据参数,后台可以动态获取相应的配置信息,而无需通过重启服务来实现。

这样做不仅仅是减轻了大量重复性工作,最重要的是可以在生产环境避免不可控的问题出现。

1.先说下基础项目的运行环境

java:>=1.8
spring-boot:2.7.13
spring-cloud:2021.0.8
spring-cloud-alibaba:2021.0.5.0
nacos:>=2.1.0

2.首先要修改bootstrap.yml共享配置,可以自定义多个。

# Spring
spring:
  application:
    # 应用名称
    name: app-test
  profiles:
    # 环境配置
    active: dev
  cloud:
    nacos:
      discovery:
        # 服务注册地址,支持ip和域名
        server-addr: 10.13.112.75:8848
      config:
        # 配置中心地址,支持ip和域名
        server-addr: nacos210:8848
        # 配置文件格式
        file-extension: yml
        #### 支持共享多个配置
        #### 配合@RefreshScope注解,可以解决nacos动态刷新配置问题
        shared-configs[0]:
          data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
          refresh: true
        shared-configs[1]:
          data-id: service-custom-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
          refresh: true

3.然后在spring管理的类上加上注解@RefreshScope

4.最后验证测试

  • 动态修改配置

  • 后台动态刷新获取配置

5.其他解决方案:

  • 可以使用注解@NacosValue,类似@Value,配置参看步骤2

此方案未验证成功,欢迎各位大佬指导。

@NacosValue(value = "${report.weekPlan.currentWeek}",autoRefreshed = true)
private Integer currentWeek;
  • 利用配置文件上下文ConfigurableApplicationContext类

此方案为终极解决方法,基本都能实现动态取值。

@Autowired
private ConfigurableApplicationContext configurableApplicationContext;

//仅展示部分关键代码
String property = configurableApplicationContext.getEnvironment().getProperty("report.weekPlan.currentWeek");

GitHub 加速计划 / na / nacos
123
24
下载
Nacos是由阿里巴巴开源的服务治理中间件,集成了动态服务发现、配置管理和服务元数据管理功能,广泛应用于微服务架构中,简化服务治理过程。
最近提交(Master分支:4 个月前 )
762303b9 * [ISSUE #12970] Fix NamingMetadataManager.removeInstanceMetadata() error fix #12970 * Update NamingMetadataManagerTest.java 3 天前
05561813 * fix type search on mysql model * 灰度模型迁移程序并发&迁移不落历史表 * Config migrate executor times * 1.Config migrate executor times 2. history comparation optimize * 1.Config migrate executor times 2. history comparation optimize * checkstyle 3 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐