nacos配置更新后,java项目无需重启配置就生效

createh53个月前 (03-26)技术教程18

在做java spring项目中,基本上用到的配置中心都是nacos,很方便的管理配置信息。在做配置管理的过程中,我们希望的是在配置修改的时候,java应用就能读取到最新的配置,而不需要重启应用使配置生效。

怎样才能做到不重启应用就能使nacos中的配置发布后生效呢,下面介绍两种方法,这两种方式都是通过java代码来配置读取最新信息的。

假设nacos配置如下,我们通过配置动态获取test.name值。

第一种方式

通过@RefreshScope注解的方式

@RestController
@RequestMapping("/")
@RefreshScope  // 添加这个注解后,请求/testRefreshScope接口就可以动态获取name信息了
public class TestController {

    // 对应nacos配置里面的值
    @Value("${test.name}")
    private String name;

    @PostMapping("/testRefreshScope")
    public void testRefreshScope() {
        System.out.println("name=" + name);
    }
}

第一种方式实现了动态读取配置,但是如果是在多个类中使用的话,就需要写好多@RefreshScope注解,然后定义好多@Value注解的成员变量,非常的不方便,下面介绍第二种方式。

第二种方式

通过@ConfigurationProperties注解的方式

先定义一个类,这个类的成员变量和nacos配置里面对应

@Component   // 加入到容器管理
@Data
@ConfigurationProperties(prefix = "test")  // 这个注解就是自动刷新配置的,prefix对应的是nacos里面的test,如果test下面多层,那么可以通过test.xx.xx这种方式来处理
public class TestConfig {
    private String  name;  // 这个对应配置test下面的name
    // 如果nacos有其他属性就继续定义成员变量
   // private String xxxx;
}

上面的TestConfig类,通过@Component加入到spring容器管理中了,那么其他地方需要使用的话,就可以通过@Resource或者@Autowired注入了,后面访问就和正常的类访问属性一样了。

@RestController
@RequestMapping("/")
public class TestController {
    @Resource 
    private TestConfig testConfig;
	
    @PostMapping("/testConfigurationProperties")
    public void testConfigurationProperties() {
        //  testConfig.getName() 每次都能获取到nacos最新的配置了
        System.out.println("name=" + testConfig.getName());
    }
}

至此,两种方式介绍完毕,个人认为,如果配置较少,调用地方也比较少,使用第一种比较方便,少写一个类。如果配置信息比较多,使用的地方也多,那么将配置写入一个类中,然后调用类里面的属性,那么第二种就比较合适,大家可以根据自身情况来选择。

相关文章

Java基础篇——环境配置

Java语言简介Java语言源自于Oracle-Sun公司,是当今最通用、最流行的软件开发语言之一。Java是简单的、面向对象的语言,最大的特性是与平台无关,有“write once, run eve...

Java教程:学会写Starter-你就懂了SpringBoot自动配置

一、为什么要写Starter目前是微服务开发时代,微服务架构,最新编写单元,一定是基于SpringBoot技术,即使不是微服务,目前也基本使用SpringBoot单体应用去掉SSM开发。故在面试中,必...

Spring概述:Spring中lOC和DI介绍,Spring框架用啥方式配置数据

IoC和DI简介IoC(Inversion of Control)是“控制反转”的意思。如何理解“控制反转”这个词呢?首先我们需要知道反转的是什么,是由谁来控制。在Spring框架没有出现之前,在Ja...

「Java」Mac如何配置JDK环境变量?

如何下载JDK?Oracle官方网站(https://www.oracle.com/index.html)直接可下载各平台的JDK版本,在这就不介绍下载安装流程了。下面以Java SE Develop...

Spring Boot 入门系列(二十四)多环境配置,3分钟搞定

之前讲过Spring Boot 的系统配置和自定义配置,实现了按照实际项目的要求配置系统的相关熟悉。但是,在实际项目开发过程中,需要面对不同的环境,例如:开发环境,测试环境,生产环境。各个环境的数据库...

开源 免费 java CMS - FreeCMS1.9 移动APP管理 栏目配置

项目地址:http://www.freeteam.cn/栏目配置管理员可以在这里设设置栏目是否是否允许移动app访问,栏目页的布局等属性。选择需要管理的栏目后点击移动APP配置按钮。填写相关属性后点击...