在之前的文章 《Nacos 本地单机版部署步骤和使用》 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能
一、Nacos 动态配置服务是什么?

文章插图
官方是这么说的:
Nacos 动态配置服务是什么?
动态配置服务可以以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置 。
动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷 。
配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易 。
Nacos 控制台的功能
Nacos 提供了一个简洁易用的 UI (控制台样例 Demo) 用来管理所有的服务和应用的配置 。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,更安全地在生产环境中管理配置变更和降低配置变更带来的风险 。
二、实战:Nacos 实现服务配置中心下面通过两个大模块实现:
- 在 Nacos 中新建或修改配置
- 在 Spring Cloud 应用中加载 Nacos 配置
http://localhost:8848/nacos/index.html#/configurationManagement点击右上角创建按钮,进入新建配置页面,新建配置如图所示:

文章插图
配置详解:
Data ID:配置为config-service.yml。Data ID 是指定配置且保证全局唯一性 。Group:默认配置为DEFAULT_GROUP,不需要修改 。配置格式: 选择 YAML 配置文件格式配置内容: 具体配置的内容 。这里简单配置了个键值对,其实实际应用场景,会配置包括存储配置、端口配置和各种中间件配置等
Data ID 标准格式如下:${prefix}-${spring.profiles.active}.${file-extension}其中:prefix:默认为spring.application.name的值spring.profiles.active:该案例为空,一般指定 dev test 等环境配置file-extension:配置内容格式
工程项目地址在:
- Github:https://github.com/JeffLi1993/springcloud-learning-example/tree/master/springcloud-nacos-config-sample
- Gitee:https://gitee.com/jeff1993/springcloud-learning-example/tree/master/springcloud-nacos-config-sample
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>springcloud</groupId><artifactId>springcloud-nacos-config-sample</artifactId><version>0.0.1-SNAPSHOT</version><name>springcloud-nacos-config-sample :: Nacos 服务配置中心案例</name><!-- Spring Boot 启动父依赖 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.2.RELEASE</version></parent><dependencies><!-- Nacos Config 依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- Spring Boot Web 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Test 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version><optional>true</optional></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>0.2.2.RELEASE</version></dependency><!-- Spring Cloud Hoxton.SR12 版本依赖 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR7</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build></project>其中依赖了:- Spring Cloud Alibaba Nacos Config 依赖
- Spring Cloud Hoxton.SR12 版本依赖
resources 目录下,创建 application.yml 文件,填入如下信息:server:port: 8083 # 服务端口spring:application:name: config-service # 服务名称其中:server.port指定了服务端口 8083spring.application.name指定了服务名称config-service,要跟 Nacos 后台新建配置的Data ID值保持一致 。
if (StringUtils.isEmpty(dataIdPrefix)) {dataIdPrefix = env.getProperty("spring.application.name");}如果 Data ID 没有配置,则读取 spring.application.name 服务名称配置 。继续创建
bootstrap.yml 文件,填入以下信息:spring:cloud:nacos:config:server-addr: 127.0.0.1:8848 # Nacos 配置中心地址file-extension: yml # 配置文件格式其中:nacos.config.server-addr指定了 Nacos 地址和端口nacos.config.file-extension指定了配置文件格式为 yml
/** * Spring Boot 服务启动类 * * Created by bysocket.com on 21/12/06. */@SpringBootApplication// Spring Boot 应用标识public class ProviderApplication {public static void main(String[] args) {// 程序启动入口// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件SpringApplication.run(ProviderApplication.class,args);}}然后新建测试控制类 ConfigController,代码如下:/** * Config 案例 * <p> * Created by bysocket.com on 21/12/07. */@RestController@Slf4j@RefreshScope@Datapublic class ConfigController {@Value("${blog.name}")private String blogName;@GetMapping("/get")public String get() {return "ConfigController#get blog name = " + getBlogName();}}代码详解如下:@Value注解 :@Value 对 Bean 的字段或者方法参数进行标注,职责是基于表达式给字段或方法参数设置默认属性值 。通常格式是注解 + SpEL 表达式,如 @Value("SpEL 表达式") 。@RefreshScope注解 :允许在运行时动态刷新 Bean 的 Scope 实现 。如果 Bean 被刷新,则在下次访问 Bean 即执行方法时,会创建一个新实例 。这说明在应用运行时,在 Nacos 控制台修改了对应配置的值后,会同时修改和生效该 Bean 这个值,达到动态配置的效果 。
2021-12-09 20:11:43.399INFO 13909 --- [-127.0.0.1_8848] o.s.c.a.n.c.NacosPropertySourceBuilder: Loading nacos data, dataId: 'config-service.yml', group: 'DEFAULT_GROUP'2021-12-09 20:11:43.400INFO 13909 --- [-127.0.0.1_8848] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-config-service.yml'}]这里可以看出,已经加载了 Nacos 配置信息 dataId: 'config-service.yml' 和 group: 'DEFAULT_GROUP'。最后在浏览器打开地址
http://localhost:8083/get ,响应如图所示:
文章插图
动态配置测试然后去 Nacos 控制台,配置列表点击修改
config-service.yml 配置 。将 www.bysocekt.com 改成 bysocket.com,然后确认发布 。如图所示:
文章插图
可以从控制台看到如下日志:
2021-12-09 20:31:30.747INFO 13909 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener: Refresh keys changed: [blog.name]重新访问下浏览器该地址 http://localhost:8083/get ,响应如图所示:
文章插图
说明动态刷新配置成功 。
三、Nacos 实现分布式配置小结本文详细介绍了Spring Cloud 整合 Nacos 实现服务分布配置 。关键两点:
- 如何在 Nacos 设置对应的配置
- 如何在工程中通过依赖和注解关联上对应的外化配置
- 官方案例:https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example
- 官方文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
- https://blog.didispace.com/spring-cloud-alibaba-nacos-config-2/
- Github:https://github.com/JeffLi1993/springcloud-learning-example
- Gitee:https://gitee.com/jeff1993/springcloud-learning-example
- 《Spring Cloud 系列教程》
- 《Spring Boot 2.x 系列教程》
- 《Elasticsearch 入门系列教程》
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
