目录
4、进入Config类,发现他有多个构造方法,怀疑问题出现在这里
一、场景:
使用@RefreshScope注解,服务启动后,在nacos配置中心,修改shared-configs下的配置文件mysql.yml,数据源无法实时更新
二、问题分析:
1、在服务启动时,我注意到:
nacos针对该服务只监听了以上3个配置文件,而我的mysql.yml并没有被监听
2、查看该服务的bootstrap.yml:
cloud:
nacos:
config:
server-addr: localhost:8848
namespace: test
group: DEFAULT_GROUP
prefix: res-foods #res-foods-test.yml
file-extension: yml
username: nacos
password: nacos
shared-configs:
- mysql.yml
3、尝试进入shared-configs发现调用了这个方法
public void setSharedConfigs(List<NacosConfigProperties.Config> sharedConfigs) {
this.sharedConfigs = sharedConfigs;
}
4、进入Config类,发现他有多个构造方法,怀疑问题出现在这里
public static class Config {
private String dataId;
private String group;
private boolean refresh;
public Config() {
this.group = "DEFAULT_GROUP";
this.refresh = false;
}
public Config(String dataId) {
this.group = "DEFAULT_GROUP";
this.refresh = false;
this.dataId = dataId;
}
public Config(String dataId, String group) {
this(dataId);
this.group = group;
}
public Config(String dataId, boolean refresh) {
this(dataId);
this.refresh = refresh;
}
public Config(String dataId, String group, boolean refresh) {
this(dataId, group);
this.refresh = refresh;
}
之前我直接写
shared-configs:
- mysql.yml
调用了
public Config(String dataId) {
this.group = "DEFAULT_GROUP";
this.refresh = false;
this.dataId = dataId;
}
5、注意到
this.refresh = false;
于是找到问题所在,只需要在yml构造时调用其他的构造,即可
三、解决问题
shared-configs:
- {dataId: mysql.yml,refresh: true}
解决