Edehuag

导航

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;

posted on 2024-12-10 14:56  饿得慌~  阅读(30)  评论(0编辑  收藏  举报