前言:Nacos不仅可以作为注册中心,还可以作为配置中心,这点优于eureka。这里介绍一下Nacos的配置热更新方法
Nacos配置热更新
我们引入Nacos配置中心的最终目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新。
要实现配置热更新,可以使用两种方式:
第一种方法(不推荐)
@RefreshScope+@Value()注解实现
第二种方法 (推荐)
使用@ConfigurationProperties(prefix = ""),并声明一个对象去映射yml的内容即可
@Component
@Data //lombok
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
private String username;
private String password;
}
调用直接注入对象即可
@Autowired
private JdbcProperties jdbcProperties;
注:
- 第一种不推荐,因为@RefreshScope在某些版本会不生效
- 这里说一下@ConfigurationProperties为什么可以做到热更新
这里是有一个@Retention(RetentionPolicy.RUNTIME)
1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。
所以@ConfigurationProperties支持热更新