Nacos热更新
相比其他注册中心,Nacos的优势之一在于热更新。
热更新,就是不需要重启服务,就能够更新配置。
nacos配置中心
首先,需要搭建 Nacos,详情见: https://www.cnblogs.com/expiator/p/17392549.html
- provider-dev.yaml,配置如下 :
my:
name: chen
age: 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: liu
age: 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 {
@Autowired
private 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