Nacos热更新
相比其他注册中心,Nacos的优势之一在于热更新。
热更新,就是不需要重启服务,就能够更新配置。
nacos配置中心
首先,需要搭建 Nacos,详情见: https://www.cnblogs.com/expiator/p/17392549.html
- provider-dev.yaml,配置如下 :
my:name: chenage: 28
第一种方式: @RefreshScope
Nacos可以通过注解 @RefreshScope 热更新。
只需在类上方添加 @RefreshScope 即可。
示例如下:
- 添加 @RefreshScope
在Controller上方添加即可。
启动服务后,调用接口,就可以查看到配置的值。
@RestController
@RefreshScope
public class ProviderController {/*** 后面的 :abc 表示默认值为 abc。*/@Value("${my.name:abc}")private String configName;@GetMapping(value = "/provider/config")public String getConfig() {return configName;}
}
- provider-dev.yaml,修改配置为:
my:name: liuage: 28
- 查看配置
可以看到日志显示配置项已经更新,
RefreshEventListener : Refresh keys changed: [my.name]
无须重启服务,修改Nacos配置后,调用接口,查看配置信息,如下:
可以看到,已经是最新的配置。
第二种方式: @ConfigurationProperties
- @ConfigurationProperties示例如下:
ConfigurationProperties做热更新。prefix 表示前缀。
比如 my.name配置,对应前缀为 my,属性为 name。
/*** ConfigurationProperties做热更新。prefix 表示前缀,比如my.name,还有my.age,前缀就是 my*/
@Component
@Data
@ConfigurationProperties(prefix = "my")
public class MyConfig {/*** my.name配置,对应前缀my,属性 name*/private String name;private Integer age;
}
- 控制层:
@RestController
public class MyConfigController {@Autowiredprivate MyConfig config;@RequestMapping("/provider/config/my")public String getConfig() {return config.getName();}}
无须重启服务,修改Nacos配置后,调用接口,就可以查看到最新的配置信息。
参考资料:
https://blog.csdn.net/wang_o_yi/article/details/124387045
https://blog.csdn.net/LMGD_/article/details/128303186