nacos配置中心的配置修改之后,无需重启服务的实现过程

 更新时间:2025年08月08日 16:43:48   作者:敲代码的猪猪侠  
本文介绍Nacos配置自动刷新的两种方式:@RefreshScope注解和@ConfigurationProperties,强调需将配置写入当前服务的配置文件以确保优先加载和动态更新,避免重启服务

前言

在微服务的项目中,我们经常使用Nacos作为配置中心,用于管理应用程序的属性配置。当我们在Nacos上修改属性值时,希望应用程序能够自动刷新并应用最新的属性值,以避免重启应用。

本篇文章将介绍Nacos属性值自动刷新的方式,并提供相应的示例代码:

项目中引入相关依赖

<!--nacos config-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

方式一:使用@RefreshScope注解

@RefreshScope注解是Spring Cloud提供的一种属性刷新机制。

它可以应用于需要动态刷新的配置类方法上,当Nacos上的属性值发生变化时,通过调用/actuator/refresh端点来刷新被注解的类或方法

这个时候是获取到配置文件信息,但是当你修改完配置,只能通过重启服务才能获取到最新的配置信息

想要实现动态刷新无需重启服务,来加载最新的配置信息:

在需要动态刷新的配置类或方法上添加@RefreshScope注解

import com.supervise.common.core.web.controller.BaseController;
import com.supervise.common.core.web.domain.AjaxResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
@RefreshScope //自动刷新bean配置
public class TestController extends BaseController {

    //测试
    @Value("${sys.test.name}")
    private String name;

    /**
     * 测试自动刷新配置
     */
    @GetMapping(value = "/onTrial")
    public AjaxResult onTrial() {

        return success(name);
    }

}

配置文件改成:张三888,看结果,实现了配置文件动态刷新

创建配置类:

@Data
@RefreshScope //自动刷新bean配置
@Component
public class TestConfig {

    //测试
    @Value("${sys.test.name}")
    private String name;

}

配置文件改成:张三666,看结果,这样也是实现了配置文件动态刷新

方式二:使用@ConfigurationProperties

import com.supervise.common.core.web.controller.BaseController;
import com.supervise.common.core.web.domain.AjaxResult;
import com.supervise.supervision.config.TestConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/test")
//@RefreshScope //自动刷新bean配置
public class TestController extends BaseController {

    //测试
    @Value("${sys.test.name}")
    private String name;

    @Resource
    private TestConfig testConfig;

    /**
     * 测试自动刷新配置
     */
    @GetMapping(value = "/onTrial")
    public AjaxResult onTrial() {
        return success(testConfig.getName());
    }

}
package com.supervise.supervision.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

@Data
@ConfigurationProperties(prefix = "sys.test") //只要前缀名和变量名两者拼接与配置配置文件一致,就能完成属性的自动注入
@Component
public class TestConfig {

    private String name;

}

配置文件改成:张三999,看结果,这样也是能实现了配置文件动态刷新

微服务项目要特别注意一下,在服务启动的时候加载配置文件是有一个优先级的,优先加载本服务所对应的配置文件,后加载公共的配置文件,要实现配置自动刷新的情况,需要把配置信息写到当前服务所对应的配置文件中!!! 

总结

本篇文章介绍了实现Nacos属性值自动刷新的方式:使用@RefreshScope注解、@ConfigurationProperties。

通过这些方式,您可以在应用程序运行时动态刷新Nacos上的属性值,避免了重启应用的麻烦。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot接口正确接收时间参数的几种方式

    SpringBoot接口正确接收时间参数的几种方式

    这篇文章主要给大家介绍了关于SpringBoot接口正确接收时间参数的相关资料,文中通过代码示例介绍的非常详细,对大家学习或者使用springboot具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • SpringBoot利用限速器RateLimiter实现单机限流的示例代码

    SpringBoot利用限速器RateLimiter实现单机限流的示例代码

    本文主要介绍了SpringBoot利用限速器RateLimiter实现单机限流的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Springboot使用SPI注册bean到spring容器的示例代码

    Springboot使用SPI注册bean到spring容器的示例代码

    这篇文章主要介绍了Springboot使用SPI注册bean到spring容器,主要包括mydriver接口,mysqldriver实现过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-10-10
  • Spring AOP配置文件方式入门教程详解

    Spring AOP配置文件方式入门教程详解

    spring aop是一个面向切面的编程,在自己第一遍学习的时候,感觉aop没有什么作用,但是真实接触下来,感觉spring aop还是很有用途的,这篇文章主要介绍了Spring AOP配置文件方式入门教程的相关资料,需要的朋友可以参考下
    2025-11-11
  • Springboot自动配置原理及DataSource的应用方式

    Springboot自动配置原理及DataSource的应用方式

    这篇文章主要介绍了Springboot自动配置原理及DataSource的应用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java并发之BlockingQueue的使用

    Java并发之BlockingQueue的使用

    这篇文章主要介绍了Java并发之BlockingQueue的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • MyBatis获取插入记录的自增长字段值(ID)

    MyBatis获取插入记录的自增长字段值(ID)

    本文分步骤给大家介绍了MyBatis获取插入记录的自增长字段值的方法,在文中给大家提到了mybatis返回插入数据的自增长id,需要的朋友可以参考下
    2017-11-11
  • 详解java jinfo命令

    详解java jinfo命令

    jinfo是jdk自带的命令,用来查看jvm的配置参数.通常会先使用jps查看java进程的id,然后使用jinfo查看指定pid的jvm信息,需要的朋友可以参考下
    2021-06-06
  • springboot项目组引入JMeter的实现步骤

    springboot项目组引入JMeter的实现步骤

    本文主要介绍了springboot项目组引入JMeter的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java基于Swing实现的打猎射击游戏代码

    Java基于Swing实现的打猎射击游戏代码

    这篇文章主要介绍了Java基于Swing实现的打猎射击游戏代码,包含完整的游戏事件处理与逻辑流程控制,具有不错的参考借鉴价值,需要的朋友可以参考下
    2014-11-11

最新评论