写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞、收藏⭐️⭐️,满足一下我的虚荣心 。
在这一篇 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
浏览器返回如下:
此时我们把nocos配置中的readTimeout值改为50000后再次访问上面的地址,发现浏览器返回的依然是5000。
在nocos配置中修改后不重启项目立即生效的现象我们就可以叫他动态获取。想要实现动态获取配置,我们可以使用如下两种方式:
1、使用@value和@RefreshScope
2、@ConfigurationProperties(prefix = "")和@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注解,建立一个类来装数据,比如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 ,浏览器返回如下:
将年龄改为30后再次访问,结果如下:
如上使用两种方式实现了配置文件的动态获取。