Spring Cloud Alibaba基础教程:使用Nacos作为配置中心

通过本教程的前两篇:

  • 《Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现》
  • 《Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)》

我们已经学会了,如何利用Nacos实现服务的注册与发现。同时,也介绍了在Spring Cloud中,我们可以使用的几种不同编码风格的服务消费方式。接下来,我们再来学习一下Nacos的另外一个重要能力:配置管理。

简介

Nacos除了实现了服务的注册发现之外,还将配置中心功能整合在了一起。通过Nacos的配置管理功能,我们可以将整个架构体系内的所有配置都集中在Nacos中存储。这样做的好处,在以往的教程中介绍Spring Cloud Config时也有提到,主要有以下几点:

  • 分离的多环境配置,可以更灵活的管理权限,安全性更高
  • 应用程序的打包更为纯粹,以实现一次打包,多处运行的特点(《云原声应用的12要素》之一)

Nacos的配置管理模型与淘宝开源的配置中心Diamond类似,基础层面都通过DataIdGroup来定位配置内容,除此之外还增加了很多其他的管理功能。

快速入门

下面我们通过一个简单的例子来介绍如何在Nacos中创建配置内容以及如何在Spring Cloud应用中加载Nacos的配置信息。

创建配置

第一步:进入Nacos的控制页面,在配置列表功能页面中,点击右上角的“+”按钮,进入“新建配置”页面,如下图填写内容:

其中:

  • Data ID:填入alibaba-nacos-config-client.properties
  • Group:不修改,使用默认值DEFAULT_GROUP
  • 配置格式:选择Properties
  • 配置内容:应用要加载的配置内容,这里仅作为示例,做简单配置,比如:didispace.title=spring-cloud-alibaba-learning

创建应用

第一步:创建一个Spring Boot应用,可以命名为:alibaba-nacos-config-client

第二步:编辑pom.xml,加入必要的依赖配置,比如:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
<optional>true</optional>
</dependency>
</dependencies>

上述内容主要三部分:

  • parent:定义spring boot的版本
  • dependencyManagement:spring cloud的版本以及spring cloud alibaba的版本,由于spring cloud alibaba还未纳入spring cloud的主版本管理中,所以需要自己加入
  • dependencies:当前应用要使用的依赖内容。这里主要新加入了Nacos的配置客户端模块:spring-cloud-starter-alibaba-nacos-config。由于在dependencyManagement中已经引入了版本,所以这里就不用指定具体版本了。

可以看到,这个例子中并没有加入nacos的服务发现模块,所以这两个内容是完全可以独立使用的

第三步:创建应用主类,并实现一个HTTP接口:

@SpringBootApplication
public class TestApplication {

public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}

@Slf4j
@RestController
@RefreshScope
static class TestController {

@Value("${didispace.title:}")
private String title;

@GetMapping("/test")
public String hello() {
return title;
}

}

}

内容非常简单,@SpringBootApplication定义是个Spring Boot应用;还定义了一个Controller,其中通过@Value注解,注入了key为didispace.title的配置(默认为空字符串),这个配置会通过/test接口返回,后续我们会通过这个接口来验证Nacos中配置的加载。另外,这里还有一个比较重要的注解@RefreshScope,主要用来让这个类下的配置内容支持动态刷新,也就是当我们的应用启动之后,修改了Nacos中的配置内容之后,这里也会马上生效。

第四步:创建配置文件bootstrap.properties,并配置服务名称和Nacos地址

spring.application.name=alibaba-nacos-config-client
server.port=8001

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

注意:这里必须使用bootstrap.properties。同时,spring.application.name值必须与上一阶段Nacos中创建的配置Data Id匹配(除了.properties或者.yaml后缀)。

第五步:启动上面创建的应用。

2019-01-27 18:29:43.497  INFO 93597 --- [           main] o.s.c.a.n.c.NacosPropertySourceBuilder   : Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP'
2019-01-27 18:29:43.498 INFO 93597 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-client.properties'}]}

在启动的时候,我们可以看到类似上面的日志信息,这里会输出应用程序要从Nacos中获取配置的dataId和group。如果在启动之后,发现配置信息没有获取到的时候,可以先从这里着手,看看配置加载的目标是否正确。

第六步:验证配置获取和验证动态刷新

用curl或者postman等工具,访问接口: localhost:8001/test,一切正常的话,将返回Nacos中配置的spring-cloud-alibaba-learning。然后,再通过Nacos页面,修改这个内容,点击发布之后,再访问接口,可以看到返回结果变了。

同时,在应用的客户端,我们还能看到如下日志:

2019-01-27 18:39:14.162  INFO 93597 --- [-127.0.0.1_8848] o.s.c.e.event.RefreshEventListener       : Refresh keys changed: [didispace.title]

在Nacos中修改了Key,在用到这个配置的应用中,也自动刷新了这个配置信息。

参考资料

  • Nacos官方文档
  • Nacos源码分析

代码示例

本文示例读者可以通过查看下面仓库的中的alibaba-nacos-config-client项目:

  • Github:https://github.com/dyc87112/SpringCloud-Learning/
  • Gitee:https://gitee.com/didispace/SpringCloud-Learning/

如果您对这些感兴趣,欢迎star、follow、收藏、转发给予支持!

以下专题教程也许您会有兴趣

  • Spring Boot基础教程
  • Spring Cloud基础教程

money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1020. 飞地的数量(图的BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 给出一个二维数组 A&#xff0c;每个单元格为 0&#xff08;代表海&#xff09;或 1&#xff08;代表陆地&#xff09;。 移动是指在陆地上从一个地方走到另一个地方&#xff08;朝四个方向之一&#xff09;或离开网格的边界。 …

论文浅尝 | ISEEQ: 利用动态元信息检索和知识图谱的资讯搜索式问题生成器

笔记整理&#xff1a;侯哲衡&#xff0c;东南大学硕士&#xff0c;研究方向为知识图谱问答、自然语言生成。动机对话资讯搜索是在智能问答中一个新兴研究领域。对话资讯搜索旨在根据通过用户查询自动询问资讯搜索式问题&#xff08;information-seeking questions&#xff0c;I…

浅谈点击信号对搜索的影响

文 | bytecoder源 | 知乎背景过去一周&#xff0c;我们探讨了搜索系统最核心的指标以及如何通过实验的方式来判断策略的好坏。但是影响一个实验的好坏除去策略本身的影响之外&#xff0c;还会受到一些反直觉的因素的影响&#xff1b;之前在做搜索&#xff0c;尤其是搜索系统成熟…

Spring Cloud Alibaba基础教程:支持的几种服务消费方式(RestTemplate、WebClient、Feign)

通过《Spring Cloud Alibaba基础教程&#xff1a;使用Nacos实现服务注册与发现》一文的学习&#xff0c;我们已经学会如何使用Nacos来实现服务的注册与发现&#xff0c;同时也介绍如何通过LoadBalancerClient接口来获取某个服务的具体实例&#xff0c;并根据实例信息来发起服务…

CCKS 2022 | 如何通过“说一句话”精准获取数据?恒生发布金融NL2SQL评测任务

某投资者登录券商理财APP&#xff0c;想要查找最近两年上市的公司&#xff0c;并按照最新的市值进行排序。然而他很难直接找到结果&#xff0c;需要经过层层筛选才能大致找到相关结果。有没有更简便的方式来查找数据&#xff1f;如果说一句话或者打一小段文字后&#xff0c;就能…

AI从业几年还不具备提出新模型的技术能力?看这个就够了!

AI是一门入门简单&#xff0c;但想深入却很难的学科&#xff0c;这也是为什么AI高端人才一直非常紧缺的重要原因。在AI领域技术领域&#xff0c;我们可以说机器学习功底决定了一个人的上限也不为过。为什么&#xff1f;机器学习就像物理学中的数学&#xff0c;如果你对数学没有…

Spring Cloud Alibaba基础教程:Nacos 生产级版本 0.8.0

昨晚Nacos社区发布了第一个生产级版本&#xff1a;0.8.0。由于该版本除了Bug修复之外&#xff0c;还提供了几个生产管理非常重要的特性&#xff0c;所以觉得还是有必要写一篇讲讲这次升级&#xff0c;在后续的文章中也都将以0.8.0版本为基础。 升级的理由 如Nacos官方的发布文…

LeetCode 1016. 子串能表示从 1 到 N 数字的二进制串(bitset)

1. 题目 给定一个二进制字符串 S&#xff08;一个仅由若干 ‘0’ 和 ‘1’ 构成的字符串&#xff09;和一个正整数 N&#xff0c;如果对于从 1 到 N 的每个整数 X&#xff0c;其二进制表示都是 S 的子串&#xff0c;就返回 true&#xff0c;否则返回 false。 示例 1&#xff…

论文浅尝 | KM-BART:用于视觉常识生成的知识增强多模态BART

笔记整理&#xff1a;陈子强&#xff0c;天津大学硕士动机视觉语言模型早期集中在纯理解任务&#xff08;例如&#xff0c;VQA视觉问答&#xff09;&#xff0c;尽管在理解任务上取得了先进的性能&#xff0c;却很少关注多模态生成任务。当前的预训练任务例如&#xff0c;掩码语…

AllenAI | 用GPT-3帮助增建数据,NLI任务直接提升十个点!?

文 | iven编 | 小轶用机器构建数据集&#xff0c;这件事可能比机器学习诞生的还要早&#xff0c;很多人做过很多工作。怎样让机器参与进来&#xff1f;前人的工作可以分成两类思路&#xff1a;一类是以远程监督为代表&#xff0c;让机器来标注&#xff0c;主要目的在于得到更多…

论文浅尝 | CLIP-Event: 用事件结构连接文本和图像

笔记整理&#xff1a;康婧淇&#xff0c;东南大学硕士&#xff0c;研究方向为多模态事件抽取、自然语言处理。动机视觉语言预训练模型通过理解图像和文本之间的排列组合&#xff0c;在支持多媒体应用方面取得了巨大成功。虽然现有的视觉语言预训练模型主要侧重于理解图像中的物…

LeetCode 402. 移掉K位数字(贪心,单调栈)

1. 题目 给定一个以字符串表示的非负整数 num&#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。 注意: num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。 示例 1 : 输入: num "1432219", k 3 输出: "1219" 解释: 移除掉…

Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现

自Spring Cloud Alibaba发布第一个Release以来&#xff0c;就备受国内开发者的高度关注。虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中&#xff0c;但是凭借阿里中间件团队的背景&#xff0c;还是得到不少团队的支持&#xff1b;同时&#xff0c;由于Spring …

忙累了躺平,躺醒后该干点啥

文 | 一只菜鸡前几天刷到 微调 的一些碎碎念&#xff0c;觉得自己的2021年还是有蛮多收获的&#xff0c;于是在各位卖萌屋小伙伴的鼓励下&#xff0c;就有了本文。收获很多&#xff0c;我从中挑选出来自我感觉对读者来说比较有用的三点。1. 放低期待&#xff0c;学会适当躺平我…

论文浅尝 | P-Adapters: 从具有不同提示的语言模型中鲁棒地提取事实信息

笔记整理&#xff1a;田玺&#xff0c;浙江大学硕士研究生。研究方向&#xff1a;知识图谱、自然语言处理论文地址&#xff1a;https://openreview.net/forum?idDhzIU48OcZh&#xff0c;录用于ICLR2022摘要之前的工作发现&#xff0c;从大型语言模型&#xff08;LLMs&#xff…

LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)

1. 题目 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数&#xff0c;试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数。 不要使用系统的 Math.random() 方法。 示例 1: 输入: 1 输出: [7]示例 2: 输入: 2 输出: [8,4]示例 3: 输入: 3 输出: [8,1,10]提示: rand…

Spring Cloud Stream同一通道根据消息内容分发不同的消费逻辑

应用场景 有的时候&#xff0c;我们对于同一通道中的消息处理&#xff0c;会通过判断头信息或者消息内容来做一些差异化处理&#xff0c;比如&#xff1a;可能在消息头信息中带入消息版本号&#xff0c;然后通过if判断来执行不同的处理逻辑&#xff0c;其代码结构可能是这样的…

图谱实战 | 再谈图谱表示:图网络表示GE与知识图谱表示KGE的原理对比与实操效果分析...

转载公众号 | 老刘说NLP知识图谱嵌入是一个经典话题&#xff0c;在之前的文章《知识表示技术&#xff1a;图谱表示VS图网络表示及基于距离函数的表示学习总结》中&#xff0c;围绕知识图谱嵌入学习这一主题&#xff0c;对比了知识图谱嵌入与图网络嵌入的异同。而在实际工作中&a…

LeetCode 1247. 交换字符使得字符串相同

1. 题目 有两个长度相同的字符串 s1 和 s2&#xff0c;且它们其中 只含有 字符 “x” 和 “y”&#xff0c;你需要通过「交换字符」的方式使这两个字符串相同。 每次「交换字符」的时候&#xff0c;你都可以在两个字符串中各选一个字符进行交换。 交换只能发生在两个不同的字…

图深度学习前沿工作汇总与解析

图深度学习除了可以应用于标准图推理任务以外&#xff0c;还广泛应用于推荐、疾病或药物预测、自然语言处理、计算机视觉、交通预测等领域。可见&#xff0c;基于图的深度学习不仅有助于挖掘现有图数据背后的丰富价值&#xff0c;而且还通过将关系数据自然地建模为图&#xff0…