Nacos热更新(动态获取配置)

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞、收藏⭐️⭐️,满足一下我的虚荣心 。

在这一篇 Nacos作为配置中心-CSDN博客 

中提到使用@RefreshScope注解动态的获取配置中心的数据,这里详细补充记录一下。

目录

测试准备

动态获取配置

@value和@RefreshScope

@ConfigurationProperties(prefix = "")和@RefreshScope


测试准备

首先,在nocos中添加配置:

readTimeout: 5000 

然后,在测试方法中添加如下代码:

@Value("${readTimeout}")
private String readTimeout; 

@GetMapping(value = "/readTimeout")
public String testConfig() {
   return readTimeout;
}

测试

启动项目后浏览器访问如下地址:

http://localhost:18880/consumer/readTimeout

浏览器返回如下:

Nacos热更新(动态获取配置)_第1张图片

此时我们把nocos配置中的readTimeout值改为50000后再次访问上面的地址,发现浏览器返回的依然是5000。

动态获取配置

在nocos配置中修改后不重启项目立即生效的现象我们就可以叫他动态获取。想要实现动态获取配置,我们可以使用如下两种方式:

1、使用@value和@RefreshScope
2、@ConfigurationProperties(prefix = "")和@RefreshScope

@value和@RefreshScope

首先我们试下@value和@RefreshScope的方式,只要将上面测试方法的类上加上@RefreshScope注解即可,完整代码如下:

@RefreshScope
@RestController
@RequestMapping("/consumer") 
public class TestController {


    @Value("${readTimeout}")
    private String readTimeout;


    @GetMapping(value = "/readTimeout")
    public String testConfig() {
        return readTimeout;
    }


}
@ConfigurationProperties(prefix = "")和@RefreshScope

当要配置的属性较多的时候,使用上面的方式就有点麻烦,也可以使用@ConfigurationProperties注解,建立一个类来装数据,比如nocos中有如下数据:

user:
  age: 18
  sex: 男

我们可以使用@ConfigurationProperties建立一个类来接收配置中的数据,如下:

@Component
@ConfigurationProperties(prefix = "user")
@Data
public class NacosPropertiesConfig {
    private String sex;
    private String age;

}

然后测试类中添加如下方法进行测试:

@RefreshScope
@RestController
public class TestController {

    @Value("${readTimeout}")
    private String readTimeout;


    @Autowired
    private NacosPropertiesConfig propertiesConfig;



    @GetMapping(value = "/readTimeout")
    public String testConfig() {
        return readTimeout;
    }


    @GetMapping(value = "/user")
    @ResponseBody
    public NacosPropertiesConfig testConfig2() {
        return propertiesConfig;
    }

此时访问 http://localhost:18880/consumer/user    ,浏览器返回如下:

Nacos热更新(动态获取配置)_第2张图片

将年龄改为30后再次访问,结果如下:

Nacos热更新(动态获取配置)_第3张图片

如上使用两种方式实现了配置文件的动态获取。

你可能感兴趣的:(Spring,Cloud,Alibaba,java,spring,cloud)