SpringBoot整合nacos的入门Demo

Nacos介绍

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。


官方文档

https://nacos.io/zh-cn/docs/what-is-nacos.html


Nacos安装部署

环境依赖:

  • JDK1.8+

下载地址
官网地址:
https://github.com/alibaba/nacos/releases
百度网盘地址:
链接:https://pan.baidu.com/s/1fTmvE9M0C_Ep_EJxQR4FPg
提取码:iscm

Nacos的安装部署非常简单,如果只是作为测试学习,那么只需要将下载下来的Nacos进行解压,然后到bin目录,根据当前系统运行对应的startup.cmd即可。


**注:**如果nacos的版本在2.2.0+以上的版本时,必须执行此变更,否则无法启动。
修改conf目录下的application.properties文件。
设置其中的nacos.core.auth.plugin.nacos.token.secret.key值,详情可查看鉴权-自定义密钥.




Nacos支持三种部署模式

  • 单机模式 - 用于测试和单机试用。

  • 集群模式 - 用于生产环境,确保高可用。

  • 多集群模式 - 用于多数据中心场景。


将下载下来的nacos包进行解压,如果是window系统,打开bin文件夹,双击运行startup.cmd即可,linux也是一样,执行 sh startup.sh 命令。

默认运行的是集群模式,如果不想使用集群,只想用单机模式,那么需要再运行的时候添加如下命令.

window:

startup.cmd -m standalone

linux:

startup.sh -m standalone

如果不想每次运行添加上述命令,那么可以修改startup.cmd或sh startup.sh脚本,修改为set MODE=“standalone”,示例图如下:

在这里插入图片描述

配置完毕之后,执行启动脚本,启动Nacos,默认地址为http://localhost:8848/nacos,账号和密码为nacos/nacos,如果不想用这个,可以在登录之后的权限控制->用户列表菜单中进行修改。

示例图如下:

在这里插入图片描述

Springboot整合Nacos示例

环境依赖

  • JDK1.8+
  • Springboot2.x
  • nacos2.x

官方的版本对应建议配置:

版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。

但是为了防止版本问题,强烈建议Springboot的版本和nacos的版本完全一致。

maven仓库配置如下;


<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.1.RELEASE</version><relativePath/></parent><dependencies><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>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.1.RELEASE</version></dependency><!--日志 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>${logback}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>${logback}</version></dependency></dependencies>

**注:**如果Springboot是2.4以上的版本,maven仓库需要额外增加如下依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency>

一个简单的示例


首先创建一个配置文件,配置文件用bootstrap.properties,配置信息如下:


spring.banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
server.port=8299
spring.application.name=springboot-nacos
spring.profiles.active=dev# nacos配置
## Nacos服务自动注册
nacos.discovery.autoRegister=true
## Nacos服务注册中心地址
spring.cloud.nacos.discovery.server-addr= http://127.0.0.1:8848
## Nacos服务配置中心地址
spring.cloud.nacos.config.server-addr= http://127.0.0.1:8848



然后再来创建一个基本的启动类


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;/*** @Author pancm* @Description springboot集成nacos配置中心* @Date  2024/1/26* @Param* @return**/
@SpringBootApplication
@EnableDiscoveryClient
public class App 
{private static final Logger logger = LoggerFactory.getLogger(App.class);public static void main( String[] args ){// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件SpringApplication.run(App.class, args);logger.info("程序启动成功!");}
}

这里我们还需要对配置是否生效进行测试,这里就创建一个Controller,然后调用接口的时候返回配置信息。@RefreshScope注解是可以进行动态刷新。


import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import static org.springframework.web.bind.annotation.RequestMethod.GET;/*** @Author pancm* @Description 官方示例文档* @Date  2024/1/26* @Param* @return**/
@RestController
@RequestMapping("config")
@RefreshScope
public class ConfigController {@Value("${pcm.name:pcm-1001}")private String name;@RequestMapping(value = "/getName", method = GET)public String getName() {return name;}}

:这里为了防止启动失败,添加配置的时候设置一个默认值。


然后运行App,启动成功,日志信息如下:

在这里插入图片描述

首先我们调用接口来查看当前的配置信息,输入http://localhost:8299/config/getName,返回示例图如下,可以看到是可以获取默认的配置。
在这里插入图片描述

然后我们在Nacos的页面上面添加一个pcm.name的配置,并且更改配置的值,这里我们更改为pcm-2001,然后点击发布。
在这里插入图片描述

这里需要注意一下DataId的名称命名规则,默认的情况下dataId=prefix.file-extension,其中profix默认为${spring.application.name}file-extension默认为properties。
如果指定了spring.profile.active,那么就会变成dataId=prefix-spring.profile.active.file-extension
比如上述的项目名称为springboot-nacos,配置文件的后缀是properties,那么DataId就是springboot-nacos.properties,指定了spring.profile.active=dev,那么DataId就是springboot-nacos-dev.properties
但是我指定了spring.profile.active=dev,为什么DataId是springboot-nacos.properties
也可以呢?因为这里还涉及到一个优先级的问题。

DataId有三个配置规则


  1. dataId =prefix
  2. dataId =prefix.file-extension
  3. dataId =prefix-spring.profile.active.file-extension

他们的优先级是按照匹配的精准度来进行了,也就是如果配置多个dataId的话,那么他会匹配最相近的,也就是匹配优先级是3>2>1,这里我们也可以通过启动中的日志进行查看。

在这里插入图片描述

发布成功之后我们可以看到日志也进行了刷新。
在这里插入图片描述

然后我们再进行访问http://localhost:8299/config/getName。通过下面的示例图我们可以看到配置已经刷新为我们设置的最新配置了。

在这里插入图片描述

Nacos配置管理


上述示例中,我们已经完成了一个简单的获取Nacos中的配置示例,并且可以实现配置刷新。但是如果我们有多个服务使用的话,那么我们需要对配置进行区分,不建议都是用默认的public空间,因此我们还需要创建新的命名空间,如果还有分组要求(一般就是环境区分,dev、test、prod),那么我们还可以再进行创建配置时指定好group。

在nacos的命名空间菜单中,我们创建一个新的命名空间,其中命名空间ID这个保证唯一就行,默认可以不填写。

在这里插入图片描述

创建成功之后,我们在来创建一个新的配置并且指定分组为dev,方便我们管理。此时里面的配置内容为pcm.name =pcm-dev

在这里插入图片描述

创建完成之后,我们在Springboot的项目配置文件中新增如下配置:

## nacos命名空间id
spring.cloud.nacos.config.namespace= pcm-namespace--id
## 对应的分组名称
spring.cloud.nacos.config.group= dev
## 配置文件后缀名,也可以不配置,默认为properties
spring.cloud.nacos.config.fileExtension= properties

重新启动项目,查看日子,我们可以看到已经配置成功了。


在这里插入图片描述

然后我们在重新启动项目,http://localhost:8299/config/getName。通过下面的示例图我们可以看到配置已经是设置的命名空间配置了。

在这里插入图片描述

多配置文件


在使用Nacos中,有时配置太多,不想放在一个配置文件中,此时就可以使用多个配置文件来进行区分管理。


在bootstrap.properties配置文件中新增如下配置,如果后续还有新的配置,参考下列配置,递增extension-configs[0]的数值即可,比如在新增一个配置文件,那么就是extension-configs[1] = xxx.properties 这样配置就可以了。

# 新增额外配置
##额外的第一个配置文件的dataId
spring.cloud.nacos.config.extension-configs[0].data-id=pcm-dev.properties
##额外的第一个配置文件的分组
spring.cloud.nacos.config.extension-configs[0].group=dev

在nacos中新增改配置文件,然后这里添加一个新的配置pcm.age=28.

在这里插入图片描述

然后再ConfigController代码中新增如下接口,添加完成之后重启项目。

    @Value("${pcm.age:18}")private String age;@RequestMapping(value = "/getAge", method = GET)public String getAge() {return age;}

访问http://localhost:8299/config/getAge。通过下面的示例图我们可以看到配置已经生生效了。

在这里插入图片描述

其他

关于SpringBoot整合nacos的demo简单讲解的文章就讲解到这里了,如有不妥,欢迎指正!

项目地址

SpringBoot 的nacos的项目工程地址:
https://github.com/xuwujing/springBoot-study/tree/master/springboot-nacos

SpringBoot整个集合的地址:
https://github.com/xuwujing/springBoot-study

SpringBoot整合系列的文章

  • springBoot配置文件的读取以及过滤器和拦截器的使用

  • SpringBoot的Restful风格的服务

  • SpringBoot+Mybatis+ Druid+PageHelper实现多数据源并分页

  • SpringBoot整合ElasticSearch实现多版本的兼容

  • SpringBoot整合Kafka和Storm

  • SpringBoot整合Jsp和Thymeleaf

  • SpringBoot整合Netty并使用Protobuf进行数据传输

  • SpringBoot简单打包部署

  • SpringBoot整合Redis使用Restful风格实现CRUD功能

  • SpringBoot优雅的全局异常处理

  • SpringBoot项目实现文件上传和邮件发送

  • SpringBoot整合Swagger和Actuator

  • SpringBoot事物Transaction实战讲解教程

  • SpringBoot切面Aop的demo简单讲解

音乐推荐

翩若惊鸿,婉若游龙,荣曜秋菊,华茂春松。仿佛兮若轻云之蔽月,飘飘兮若流风之回雪。远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。–网易云网友评论

原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!
版权声明:
作者:虚无境
博客园出处:http://www.cnblogs.com/xuwujing
CSDN出处:http://blog.csdn.net/qazwsxpcm    
个人博客出处:http://www.panchengming.com

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

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

相关文章

操作系统(6)----线程相关

目录 1.线程与进程的关系 2.线程的属性 3.线程的实现方式 用户级线程 内核级线程 多线程模型 一对一模型: 多对一模型&#xff1a; 多对多模型&#xff1a; 4.线程的状态和转换 5.线程的组织与控制 1.线程与进程的关系 可以把线程理解为“轻量级进程”。线程是一个…

大创项目推荐 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

【Spring实战】31 Spring Boot3 集成 Gateway 微服务网关

文章目录 1. 定义2. 功能3. 示例代码1) 创建一个业务服务2&#xff09;创建一个网关服务3&#xff09;启动服务4&#xff09;验证 4. 代码参考结语 1. 定义 Spring Cloud Gateway 是一个基于 Spring Framework 的开源网关服务&#xff0c;用于构建微服务架构中的 API 网关。它…

C51 单片机学习(一):基础外设

参考 51单片机入门教程 1. 单片机简介 1.1 定义 单片机&#xff08;Micro Controller Unit&#xff0c;简称 MCU&#xff09; 内部集成了 CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集&#xff08;依靠传感器&#xff09;、处…

休息日的思考与额外题——链表

文章目录 前言链表知识点 一、 92. 反转链表 II二、21. 合并两个有序链表总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0c;于是参加了卡子哥的刷题班&#xff0c;训练…

富文本编辑器CKEditor4简单使用-01

富文本编辑器CKEditor4简单使用-01 1. 快速体验入门1.1 通过从 CDN 加载 CKEditor 来快速体验1.2 从官方网站下载软件包1.2.1 官网下载1.2.2 解压、简单使用&#xff08;自带index页面示例&#xff09;1.2.3 将 CKEditor 4 添加到自己的页面1.2.3.1 目录结构1.2.3.2 效果1.2.3.…

TensorFlow2实战-系列教程6:迁移学习实战

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、迁移学习 用已经训练好模型的权重参数当做自己任务的模型权重初始化一般全连接层需…

【机器学习】工程实践问题概述

机器学习实际应用时的工程问题与面临的挑战 一、实现细节问题 1.1 训练样本 训练样本与标注对各类机器学习算法和模型的精度影响 训练样本的选择对各类机器学习算法和模型的影响 训练样本的优化 如何进行数据增强&#xff1f; 如何进行数据清洗&#xff1f; 样本的标注对各类机…

数据结构(二)------单链表

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一.什么是链表二.链表的分类三.单链表的实现总结 前言 上一节&#xff0c;我们介绍了顺序表的实现与一些经典算法。 但是顺序表这个数据结构依然有不少缺陷&#xff1a; 1.顺序表指定…

导航页配置服务Dashy本地部署并实现公网远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航…

基于springboot宠物领养系统

摘要 随着社会的不断发展和人们生活水平的提高&#xff0c;宠物在家庭中的地位逐渐上升&#xff0c;宠物领养成为一种流行的社会现象。为了更好地管理和促进宠物领养的过程&#xff0c;本文基于Spring Boot框架设计和实现了一套宠物领养系统。该系统以用户友好的界面为特点&…

时序分析中的去趋势化方法

时序分析中的去趋势化方法 时序分析是研究随时间变化的数据模式的一门学科。在时序数据中&#xff0c;趋势是一种随着时间推移而呈现的长期变化趋势&#xff0c;去趋势化是为了消除或减弱这种趋势&#xff0c;使数据更具平稳性。本文将简单介绍时序分析中常用的去趋势化方法&a…

跟着cherno手搓游戏引擎【13】着色器(shader)

创建着色器类&#xff1a; shader.h:初始化、绑定和解绑方法&#xff1a; #pragma once #include <string> namespace YOTO {class Shader {public:Shader(const std::string& vertexSrc, const std::string& fragmentSrc);~Shader();void Bind()const;void Un…

怎样自行搭建幻兽帕鲁游戏联机服务器?

幻兽帕鲁是一款深受玩家喜爱的多人在线游戏&#xff0c;为了获取更好的游戏体验&#xff0c;许多玩家希望能够自行搭建幻兽帕鲁游戏联机服务器&#xff0c;本文将指导大家如何自行搭建幻兽帕鲁游戏联机服务器。 自行搭建幻兽帕鲁游戏联机服务器&#xff0c;阿里云是一个不错的选…

结构体的增删查改

结构体&#xff0c;是为了解决生活中的一些不方便利用c语言自带数据类型来表示的问题。例如表示一个学生&#xff0c;那么学生这个个体假如用c语言自带数据类型怎么表示呢。可以使用名字&#xff0c;也就是字符数组&#xff1b;也可以使用学号&#xff0c;也就是int类型。但是这…

iOS 面试 Swift基础题

一、Swift 存储属性和计算属性比较&#xff1a; 存储型属性:用于存储一个常量或者变量 计算型属性: 计算性属性不直接存储值,而是用 get / set 来取值 和 赋值,可以操作其他属性的变化. 计算属性可以用于类、结构体和枚举&#xff0c;存储属性只能用于类和结构体。存储属性可…

检测头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

MySQL-窗口函数 简单易懂

窗口函数 考查知识点&#xff1a; • 如何用窗口函数解决排名问题、Top N问题、前百分之N问题、累计问题、每组内比较问题、连续问题。 什么是窗口函数 窗口函数也叫作OLAP&#xff08;Online Analytical Processing&#xff0c;联机分析处理&#xff09;函数&#xff0c;可…

Android 基础技术——列表卡顿问题如何分析解决

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于列表卡顿问题如何分析解决 onBindViewHolder 优化 是否有耗时操作、重复创建对象、设置监听器、findViewByID、局部的动画对象等操作 是否存在内存泄漏 发生内存泄露&#xff0c;会导致一些不再使用…

游戏开发丨基于Tkinter的扫雷小游戏

文章目录 写在前面扫雷小游戏需求分析程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于tkinter的扫雷小游戏 所需环境 pythonpycharm或anaconda 下载地址 https://download.csdn.net/download/m0_68111267/88790713 扫雷小游戏 扫雷是一款广为人知的单…