Spring Cloud Alibaba 是阿里巴巴提供的一站式微服务开发解决方案,目前已被 Spring Cloud 官方收录。而 Nacos 作为 Spring Cloud Alibaba 的核心组件之一,提供了两个非常重要的功能:服务注册中心(服务注册和发现)功能,和统一配置中心功能。
Nacos 致力于帮助开发者发现、配置和管理微服务。它提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 具有以下特性:
创建一个新的 Spring Boot 项目,添加 nacos config 和 web(非必须)框架依赖,如下图所示:
PS:添加 web 依赖主要作用是为了方便后面代码测试。
如果是老项目,那么需要手动添加 nacos config 的依赖,修改 pom.xml 文件,添加以下内容:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>在应用的 /src/main/resources/ 目录下,创建引导配置文件 bootstrap.yml(或 bootstrap.properties),添加以下 Nacos Config 配置信息:
spring: application: name: nacosconfig # 项目名称和 nacos DataId 相匹配 cloud: nacos: config: server-addr: 127.0.0.1:8848 # nacos 地址和端口 file-extension: yaml # 获取配置文件的格式:yaml username: nacos # nacos 认证用户名 password: nacos # nacos 认证密码server: port: 9001 # 项目启动端口创建一个控制器,使用 @Value 注解读取配置信息,读取方式和 Spring Boot 读取本地配置代码一致:
import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class TestController { // 从 nacos 中读取配置项 config.info @Value("${config.info}") private String configInfo; @GetMapping("/getconfig") public String getConfigInfo(){ return configInfo; }}在 Nacos 控制台创建并设置配置文件,执行步骤如下所示。
首先,在配置列表中点击“添加”按钮,如下图所示:
进入配置页面,新建 YAML 或 Properties 配置文件,如下图所示:
以上关键参数的含义和规则说明如下。
Data ID 的拼接格式如下:
${prefix} - ${spring.profiles.active} . ${file-extension}
其中
Group 分组选项,主要是用来隔离不同的配置项目的,它的默认值为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 配置。
配置好相应的内容之后,点击底部的“发布”按钮即可,添加成功之后会自动返回配置列表,如下图所示:
启动项目,查看执行结果如下图所示:
动态刷新功能是指:在 Nacos 配置中心修改的配置内容,在不重启项目的前提下可以实时的读取到。
Nacos 默认会为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法。
但如果需要对 Bean 进行动态刷新,需要参照 Spring 和 Spring Cloud 规范,推荐给类添加 @RefreshScope 或 @ConfigurationProperties 注解。
以上面的案例来说,如果需要添加动态刷新功能,只需要在控制器上添加 @RefreshScope 注解即可,实现代码如下:
import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@RestController@RefreshScope // 开启配置文件的动态刷新public class TestController { // 从 nacos 中读取配置项 config.info @Value("${config.info}") private String configInfo; @GetMapping("/getconfig") public String getConfigInfo(){ return configInfo; }}最终的实现结果如下:
Nacos 配置中心有两个很好用的功能:一个是修改配置时的内容对比,让您一眼就可以看出此次修改的配置内容,防止误操作;第二个是历史版本一键回滚功能,让您能够轻松的实现溯源和回滚配置文件。
在修改配置文件时,会先出现一个配置文件的对比预览页面,如下图所示:
这样您就可以清楚的看到此次修改和添加的具体配置信息了,从而减少了误改的风险。
Nacos 通过提供配置版本管理及其一键回滚能力,帮助用户改错配置的时候能够快速恢复,降低微服务系统在配置管理上的一定会遇到的可用性风险。

https://gitee.com/mydb/spring-cloud-alibaba-example/tree/master/spring-cloud-nacos-config
Nacos 作为 Spring Cloud Alibaba 的核心组件之一,提供了两个非常重要的功能:注册中心和配置中心功能。其中配置中心是将配置文件从本地化,变更为云端化的过程(Nacos 服务端),这样既能保证配置文件的安全性,又能实时的修改、查看、回滚和动态刷新配置文件了。
Nacos 官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html
是非审之于己,毁誉听之于人,得失安之于数。
公众号:Java中文社群
Java面试合集:https://gitee.com/mydb/interview




作者: 王磊的博客
出处: http://vipstone.cnblogs.com/