Nacos配置热更新的三种方式
配置热更新的定义:
1.外部配置中心配置项发生变化时,应用端在无需重启应用的情况下能自动同步最新配置数据
方式一、Environment热更新
1.Environment代表了应用的运行时环境,其中包括了profiles 和 properties,而properties属性可能来源于properties文件、JVM properties、system环境变量等等
2.nacos配置变更后,environment对象中能自动同步变更的数据,可通过其String getProperty(String key);获取
Environment对象:
Environment对象可直接注入使用,或者通过EnvironmentAware获取使用
1,在hailtaxi-driver服务中进行实验,找到Drivercontro1ler,添加如下代码
@Autowired
private Environment environment;
@GetMapping("/appName")
public string getAppName(){
return environment.getProperty("app.name");
}
2,在nacos控制台找到xxx-driver-dev.yaml配置文件,添加如下配置并发布
app:
name:edhug
3,启动访问:http://localhost:8088/driver/appName
4,在控制台更改app.name,不重启应用,再次访问查看结果
方式二、@ConfigurationProperties热更新
1.ConfiqurationProperties注解的作用是用于获取配置文件中的配置项并绑定到bean的属性上
2.nacos配置变更后,ConfiqurationProperties所标注bean的属性能自动刷新值
1,创建com.itheima.driver.properties.AppProperties
@configurationProperties("app")
@configuration
@Data
public class AppProperties {
private string name;
}
修改Drivercontroller#getAppName方法
@Autowired
private Environment environment;
@Autowiredprivate AppProperties appProperties;
@GetMapping("/appName")
public string getAppName(){
return environment.getProperty("app.name")+"---"+ appProperties.getName();
}
方式三、@Value+@RefreshScope热更新
1.Value注解也是可以将指定的配置项绑定到bean的属性上
2.nacos配置变更后Vaue标注的属性默认不会自动刷新值,需要在对应bean上标注Refreshscope注解才可以
@RefreshScope
@RestController
@RequestMapping(value = @value"/driver")
@SLf4j
public class DriverController {
@Value("${app.name:edhug}")
private String appName;