news 2026/4/24 16:04:56

Spring Boot 3.x 整合 Nacos 全栈实战教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot 3.x 整合 Nacos 全栈实战教程

Nacos 是阿里巴巴开源的一款功能强大的动态服务发现、配置管理和服务管理平台。在微服务架构中,它扮演着“注册中心”和“配置中心”的双重角色,完美替代了 Eureka 和 Spring Cloud Config。

本教程将基于Spring Boot 3.xSpring Cloud Alibaba 2022.x,手把手教你如何从零搭建 Nacos 环境,并实现服务的注册发现与配置的动态刷新。

环境准备与 Nacos 服务端启动

在开始编写代码之前,我们需要先拥有一个运行中的 Nacos 服务端。

  1. 下载 Nacos
    访问 Nacos 官方 GitHub 发布页,下载最新稳定版(如 2.x 版本)的压缩包并解压。
  2. 单机模式启动
    Nacos 默认是以集群模式启动的,如果是本地学习或开发测试,必须指定为单机模式,否则会因找不到集群配置而启动失败。

进入 Nacos 的bin目录,执行以下命令:

  • Windows:startup.cmd -m standalone
  • Linux/Mac:sh startup.sh -m standalone
  1. 访问控制台
    启动成功后,打开浏览器访问http://127.0.0.1:8848/nacos
  • 默认账号:nacos
  • 默认密码:nacos
核心依赖与基础配置

我们将创建一个标准的 Spring Boot 项目,并引入 Nacos 的相关依赖。

  1. Maven 依赖
    确保你的pom.xml中包含以下核心依赖。注意版本管理,这里使用的是 Spring Cloud Alibaba 的 Starter。
<dependencies><!-- Nacos 服务发现依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- Nacos 配置中心依赖 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- Web 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Actuator 用于刷新配置(可选,但推荐) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies><dependencyManagement><dependencies><!-- 引入 Spring Cloud Alibaba 的版本管理 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2022.0.0.0</version><!-- 请根据 Spring Boot 版本选择对应版本 --><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
  1. 配置 bootstrap.yml
    这是最关键的一步。为了让 Nacos 配置中心在应用启动的早期阶段生效,必须将 Nacos 的连接配置写在bootstrap.yml(或bootstrap.properties)中,而不是application.yml中。因为bootstrap的加载优先级高于application
spring:application:name:nacos-demo-service# 服务名,也是 Nacos 中 Data ID 的前缀cloud:nacos:# 配置中心地址config:server-addr:127.0.0.1:8848file-extension:yaml# 配置文件格式# namespace: public # 如果需要隔离环境,填写命名空间 ID# group: DEFAULT_GROUP # 默认分组# 服务注册中心地址discovery:server-addr:127.0.0.1:8848# 暴露刷新端点,用于手动触发配置刷新(如果不使用自动刷新)management:endpoints:web:exposure:include:refresh
实战一:配置中心与动态刷新

我们将演示如何从 Nacos 获取配置,并在不重启服务的情况下动态修改配置。

  1. 在 Nacos 控制台发布配置
  • 登录 Nacos 控制台,进入“配置管理” -> “配置列表”。
  • 点击“+”号新建配置。
  • Data ID:nacos-demo-service.yaml(必须与spring.application.name+file-extension对应)。
  • 配置内容:
message:"Hello from Nacos Config!"feature-enabled:true
  • 点击“发布”。
  1. 编写代码读取配置
    使用@RefreshScope注解是实现配置热更新的关键。当 Nacos 中的配置发生变化时,Spring 容器会自动重新注入最新的值。
importorg.springframework.beans.factory.annotation.Value;importorg.springframework.cloud.context.config.annotation.RefreshScope;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;@RestController@RefreshScope// 开启配置动态刷新publicclassConfigController{@Value("${message:Default Message}")privateStringmessage;@Value("${feature-enabled:false}")privatebooleanfeatureEnabled;@GetMapping("/config")publicStringgetConfig(){return"当前配置: "+message+", 功能开关: "+featureEnabled;}}
  1. 验证效果
  • 启动应用,访问http://localhost:8080/config,你会看到 Nacos 中的配置内容。
  • 回到 Nacos 控制台,修改message的值为 “Hello World Updated!” 并发布。
  • 无需重启应用,再次刷新浏览器接口,你会发现配置已经实时生效。
实战二:服务注册与发现

接下来,我们将演示如何让服务注册到 Nacos,并让另一个服务发现它。

  1. 服务提供者
    假设我们有一个user-service,它只需要配置好discovery依赖和地址,启动后就会自动注册到 Nacos。
// 启动类@SpringBootApplication@EnableDiscoveryClient// 开启服务发现(Spring Cloud Alibaba 中通常可省略,自动生效)publicclassUserServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(UserServiceApplication.class,args);}}

启动后,在 Nacos 控制台的“服务管理” -> “服务列表”中,你应该能看到user-service

  1. 服务消费者
    消费者通过DiscoveryClientRestTemplate来调用提供者。
importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.cloud.client.ServiceInstance;importorg.springframework.cloud.client.discovery.DiscoveryClient;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.client.RestTemplate;importjava.util.List;@RestControllerpublicclassConsumerController{@AutowiredprivateDiscoveryClientdiscoveryClient;@AutowiredprivateRestTemplaterestTemplate;@GetMapping("/call-user")publicStringcallUserService(){// 1. 从 Nacos 获取名为 "user-service" 的所有实例List<ServiceInstance>instances=discoveryClient.getInstances("user-service");if(instances.isEmpty()){return"没有找到可用的用户服务";}// 2. 获取第一个实例的地址ServiceInstanceinstance=instances.get(0);Stringurl=instance.getUri()+"/user/info";// 假设提供者有这个接口// 3. 发起调用return"调用结果: "+restTemplate.getForObject(url,String.class);}}
常见坑点与排查
  • 配置无法加载
    • 检查bootstrap.yml是否写错成了application.yml
    • 检查 Nacos 中的 Data ID 是否与代码中的spring.application.name完全一致。
    • 检查file-extension是否匹配(如 Nacos 中是.yaml,配置里也要写yaml)。
  • 服务注册不上
    • 检查 Nacos 服务端是否真的启动成功(查看日志)。
    • 检查server-addr端口是否被防火墙拦截。
    • 如果是 Docker 环境,注意 IP 地址的映射问题。
  • 动态刷新不生效
    • 确保类上加了@RefreshScope注解。
    • 确保引入了spring-boot-starter-actuator依赖。

通过以上步骤,你已经成功将 Nacos 集成到了 Spring Boot 3.x 项目中,实现了微服务架构中最核心的注册与配置功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 16:04:25

Claude Opus 4.7 太强了,保姆级使用指南

Claude Opus 4.7 太强了&#xff0c;保姆级使用指南引言正文一、如何使用 Claude Opus 4.7 ?1.1 现在&#xff0c;Opus 4.7已在**浏览器插件DeepSider**中同步上线&#xff0c;国内可用&#xff0c;无需注册Claude账号。1.2 DeepSider内置了大量热门AI模型&#xff0c;包括Gem…

作者头像 李华
网站建设 2026/4/24 16:04:36

MOOG电液伺服阀D661-4577C

D661-4577C 是穆格&#xff08;MOOG&#xff09;D661系列中的一款先导式伺服比例控制阀&#xff0c;属于电液伺服控制系统的核心执行元件。该阀基于模拟信号控制&#xff0c;采用先进的 ServoJet 伺服射流管先导技术&#xff0c;兼具伺服阀的高动态响应特性与比例阀的抗污染能力…

作者头像 李华
网站建设 2026/4/18 18:38:14

硬件 / PCB / 高速电路通用信号传输方式

信号传输方式&#xff08;总共 4 大类&#xff09;1. 单端传输 Single-ended1 根信号线 GND以地为参考简单、便宜、怕干扰例子&#xff1a;GPIO、I2C、SPI、UART、普通时钟2. 差分传输 Differential一对线&#xff1a; 和 -&#xff0c;反相以电压差为信号抗干扰极强、低 EMI、…

作者头像 李华
网站建设 2026/4/18 18:37:13

雪花算法(Snowflake)

雪花算法&#xff08;Snowflake&#xff09; 是 Twitter 开源的分布式唯一 ID 生成算法。它的核心思想是将一个 64位&#xff08;bit&#xff09; 的 长整型&#xff08;Long&#xff09; 数字&#xff0c;按位划分为几个不同的部分&#xff0c;分别用来存储时间戳、机器标识和…

作者头像 李华
网站建设 2026/4/18 18:35:27

ABAP ALV交互进阶:详解双击事件与动态跳转逻辑

1. 理解ALV双击事件的核心逻辑 ALV报表作为SAP系统中最常用的数据展示工具&#xff0c;其交互能力直接影响用户体验。双击事件&#xff08;Double Click&#xff09;是最自然的交互方式之一&#xff0c;用户会本能地希望通过点击获取更多信息。在ABAP开发中&#xff0c;实现这一…

作者头像 李华