Nacos Config Spring Cloud

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nacos Config Spring Cloud相关的知识,希望对你有一定的参考价值。

参考技术A 这里分析下Nacos Config在Spring Cloud下的使用。整体调用链路如下表所示。

加载了spring.cloud.nacos相关配置,生成NacosConfigProperties。

初始化了NacosConfigManager,主要是根据NacosConfigProperties初始化了ConfigService,这个也是Nacos Client 对外保留的核心对象,用于获取配置,添加监听等。

用于初始化了NacosPropertySourceLocator对象,实现了PropertySourceLocator接口,用于加载额外的配置信息。

加载分布式的配置,形如spring.cloud.nacos.config.shared-configs[0]=xxx 的配置。

加载扩展配置,如spring.cloud.nacos.config.extension-configs[0]=xxx ,其实我没搞明白这俩有啥区别。

加载应用主配置信息,这里会加载默认的两个配置,dataIdPrefix+group与dataIdPrefix.fileExtension+group,如果不想加载可以通过配置spring.cloud.nacos.config.group=来避免加载,只加载上面的shared-configs与extension-configs的配置。

这里会判断是否有父Context并且包含了NacosConfigProperties,如果有从父Context中直接获取。

初始化了NacosRefreshHistory,用于存储Nacos数据更新历史,最大存储20条。

初始化了NacosConfigManager,与上面的一致。

初始化了NacosContextRefresher,这个是比较核心的类,这个类实现了ApplicationListener,监听ApplicationReadyEvent事件,在Application完成的时候,执行Nacos变化监听。

registerNacosListenersForApplications() --> registerNacosListener() --> 这里会新建一个Listener,并通过configService#addListener()方法添加到Nacos的变化监听中。当收到变化的时候,首先添加了刷新纪录nacosRefreshHistory#addRefreshRecord(),其次发布了RefreshEvent事件。

在发布了RefreshEvent事件之后,就可以使用 Spring Cloud自带的RefreshScope机制 来实现属性的刷新了。在Spring Cloud 监听到变化,会执行ContextRefresher#refresh()。首先会重新加载引导信息,也就会重新调用NacosPropertySourceLocator#locate(),从而从Nacos中读取最新的配置。其次会清空缓存对象,重新以最新的Enviroment生成对象,来达到属性更新的目的。

整体来说Nacos Config在Spring Cloud的实现比较简单。核心使用了Spring Cloud的RefreshScope机制来实现对象属性的动态刷新。

spring cloud Nacos Config配置中心

概述
Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos Config就是一个类似于SpringCloud Config的配置中心
接入
SpringCloud项目集成Nacos Config配置中心很简单。只需要部署Nacos 客户端并在里面添加配置即可。然后引入Nacos Config动态读取即可
1. 创建一个SpringCloud工程cloud-config 修改 pom.xml 文件,引入 Nacos Config Starter

前提得选引入spring-cloud-alibaba-dependencies

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2. 修改application.properties配置

server.port=18085
management.endpoints.web.exposure.include=*

3. 新建bootstrap.properties文件

spring.application.name=cloud-config
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

4. 启动Nacos客户端

具体步骤可参考 上篇文章
5. 配置列表新增配置

dataId :格式如下 ${prefix} - ${spring.profiles.active} . ${file-extension}

prefix 默认为 spring.application.name 的值

spring.profiles.active 当前环境对应的 profile

file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。 目前只支持 properties 类型。

group 默认DEFAULT_GROUP

当activeprofile 为空时直接填写 spring.application.name值即可 默认properties

 

技术图片

5. 添加Controller并在类上添加 @RefreshScope动态获取配置中心的值

@RestController
@RefreshScope
public class SampleController {

@Value("${user.name}")
String userName;

@Value("${user.age}")
int age;


@RequestMapping("/user")
public String simple() {
return "获取 Nacos Config配置如下:" + userName + " " + age + "!";
}
}

6.启动测试

这样就可以获取到配置中心的值。并且配置中心修改值后。可以立即动态刷新获取最新的值

 

以上是关于Nacos Config Spring Cloud的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud——Spring Cloud Alibaba 2021 Nacos Config bootstrap 配置文件失效解决方案

SpringCloud - Spring Cloud Alibaba 之 Nacos Config配置数据;MySQL持久化;Nacos集群

SpringCloud - Spring Cloud Alibaba 之 Nacos Config配置中心

Spring Cloud Alibaba - 17 Nacos Config 配置中心 应用篇

Spring Cloud Alibaba Nacos集成

Spring Cloud 之配置中心