Nacos 进行配置管理
About 1 min
Nacos 进行配置管理
Nacos支持多种配置管理模式,当已经启动一个nacos实例后,访问http://localhost:8848/nacos就能访问nacos的Dashboard,可以看到有以下支持。
比如,我的一个Springboot项目中就用到了下面这种配置方式,主要用到的就是properties和YAML两种
使用Java SDK进行配置
官方文档在这里,我的需求主要只是获取相关的配置而不是发布,因此只实现了获取相关配置的接口。可以看到这种方式需要进行Bean的注册通过调用Bean的方式进行实现
@Log4j2
@Service
public class NacosConfigService implements ConfigService {
@Value("${api-monitor.config.nacos.server}")
private String nacosServer;
@Value("${api-monitor.config.nacos.username}")
private String nacosUsername = "";
@Value("${api-monitor.config.nacos.password}")
private String nacosPassword = "";
@Value("${api-monitor.config.nacos.group}")
private String nacosGroup;
@Value("${api-monitor.config.nacos.data-id}")
private String nacosDataId;
private final Properties request = new Properties();
private final Properties properties = new Properties();
@Override
public String getProperty(String key) {
try {
String property = this.getContext();
if (StringUtils.hasText(property)) {
properties.load(new StringReader(property));
}
} catch (Exception e) {
log.error("Nacos error:{}", ExceptionUtils.getStackTrace(e));
}
String property = properties.getProperty(key);
return property != null? property : "";
}
private String getContext() {
String context = null;
try {
request.put(PropertyKeyConst.SERVER_ADDR, nacosServer);
if (nacosUsername != null && !nacosUsername.isBlank()){
request.put(PropertyKeyConst.USERNAME, nacosUsername);
request.put(PropertyKeyConst.PASSWORD, nacosPassword);
}
context = NacosFactory.createConfigService(request)
.getConfig(nacosDataId, nacosGroup, 5000);
} catch (NacosException e) {
log.error("Nacos error:{}", ExceptionUtils.getStackTrace(e));
}
return context;
}
}
使用Springboot原生注解
使用原生注解有一个问题,就是@Conditionalxxxxx这样的注解是在新版中才支持注入的,这主要是和Bean的生命周期有关需要Nacos在Bean更早的生命阶段进行获取配置然后条件注入Bean。