Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
前面已经搭建好 Nacos Server服务了,接下里使用 Nacos 做配置中心。
在Nacos Server服务的配置管理中添加一个配置。
注意:
DataId唯一,每个配置的DataId都不能重复。
把界面中的示例代码稍微改一改就可以使用了。
public class NacosConfigJavaDemo {
public static void main(String[] args) throws NacosException, InterruptedException {
String serverAddr = "192.168.xxx.xxx";
String dataId = "nacos.config.java.demo";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
// 获取Naocs配置服务
ConfigService configService = NacosFactory.createConfigService(properties);
/**
* 1.获取Nacos配置
*/
String content = configService.getConfig(dataId, group, 5000);
System.out.println("nacos.config.java.demo配置信息如下:\n" + content);
/**
* 2.注册监听器,配置发生修改并发布时,获取发布后的配置信息。
*/
configService.addListener(dataId, group, new Listener() {
@Override
public void receiveConfigInfo(String configInfo) {
System.out.println("receiveConfigInfo方法,获取发布后的配置信息:\n" + configInfo);
}
@Override
public Executor getExecutor() {
return null;
}
});
/**
* 3.发布配置,发送 properties格式的配置信息(可指定发布文件格式)。
*/
TimeUnit.SECONDS.sleep(5);
String content2 = "server:\n" +
" port: 18082\n" +
"user:\n" +
" age: 33 #年龄\n" +
" name: nacos-config-yaml";
boolean isPublishOk = configService.publishConfig(dataId,group,content2, ConfigType.YAML.getType());
System.out.println("isPublishOk = " + isPublishOk);
/**
* 4.删除配置
*/
//TimeUnit.SECONDS.sleep(5);
//boolean isRemoveOk = configService.removeConfig(dataId, group);
//System.out.println("isRemoveOk = "isRemoveOk);
// 防止main方法结束
TimeUnit.MINUTES.sleep(3);
}
}
测试结果如下:到此 Nacos配置中心就可以管理我们的配置信息了。
官方文档:
1)引入依赖
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring‐cloud‐starter‐alibaba‐nacos‐configartifactId>
dependency>
2)添加 bootstrap.properties
使用 bootstrap.properties 配置文件来配置 Nacos Server 地址。
# 配置中心地址
spring.cloud.nacos.config.server‐addr=192.168.xxx.xxx:8848
# dataid 为 yaml 的文件扩展名配置方式
spring.cloud.nacos.config.file‐extension=yaml
spring.application.name=nacos-config
#profile粒度的配置 `${spring.application.name}‐${profile}.${file‐extension:properties}`
#spring.profiles.active=dev
在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
3)添加配置
在 Nacos Server配置中心中新建 DataId为 nacos‐config的 yaml格式的配置文件。
启动服务,使用 Spring原生的 @Value(“key”)注解获取配置即可。
@Value注解:
可以获取到配置中心的值,但是无法动态感知修改后的值。@RefreshScope注解:
Nacos的注解,可以实现动态感知配置中心修改后的值。@RestController
@RefreshScope
public class NacosConfigController {
/**
* 使用 Spring原生的 @Value(“key”)注解获取配置
*/
@Value("${server.port}")
private String port;
@Value("${user.name}")
private String userName;
@GetMapping("getNacosConfig")
public String providerTest() {
String str = "port:" + port + "====userName:" + userName;
System.out.println(str);
return str;
}
}
测试ok。
在配置 spring.profiles.active=dev使用时,没有生效。暂时没理解。
– 求知若饥,虚心若愚。