Spring Cloud Alibaba Nacos 配置中心

FreeGuideOnline 最新 2026-07-10

Spring Cloud Alibaba Nacos 配置中心完全指南

Nacos 是构建云原生应用的动态服务发现、配置管理和服务管理平台。作为 Spring Cloud Alibaba 的核心组件之一,Nacos Config 提供了分布式配置中心的能力,支持配置的动态刷新、版本管理、灰度发布等功能。本教程将带你从零开始掌握 Nacos 配置中心的使用。

为什么需要配置中心

在微服务架构中,每个服务都有大量的配置文件,如数据库连接、业务开关、第三方密钥等。传统做法将这些配置硬编码在项目中或放到本地文件中,会带来以下问题:

  • 变更成本高:修改配置需要重新打包部署
  • 安全隐患:敏感信息暴露在代码仓库中
  • 环境混乱:开发、测试、生产环境配置难以统一管理
  • 无法动态调整:不能实时修改运行时参数

Nacos 配置中心解决了上述痛点,将配置统一存储在云端,并提供热更新的能力。

准备工作

在开始之前,请确保已具备以下环境:

  • JDK 1.8+
  • Maven 3.2+
  • Spring Boot 2.x 项目
  • Nacos Server 1.4.1+(单机模式即可用于学习)

快速启动 Nacos Server

下载 Nacos 压缩包并解压,进入 bin 目录:

# Linux/Mac
sh startup.sh -m standalone

# Windows
cmd startup.cmd -m standalone

启动后访问 http://localhost:8848/nacos ,默认账号密码均为 nacos

快速入门

1. 创建 Spring Boot 工程

新建一个 Maven 项目,添加依赖:

<properties>
    <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
    <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.7.RELEASE</spring-cloud-alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</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>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
</dependencies>

2. 配置 Nacos 地址

bootstrap.properties(或 bootstrap.yml)中配置 Nacos 服务器地址和应用信息:

spring.application.name=nacos-config-demo
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# 指定配置文件类型,默认 properties
spring.cloud.nacos.config.file-extension=properties

注意:必须使用 bootstrap.properties,因为其加载优先级高于 application.properties,确保 Nacos 配置能在应用上下文启动早期加载。

3. 编写测试接口

创建一个 Controller,通过 @Value 注入配置项:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope   // 开启配置自动刷新
public class ConfigController {

    @Value("${config.info:default info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

4. 在 Nacos 控制台添加配置

打开 Nacos 管理界面,在“配置管理” -> “配置列表”中点击“+”号,新建配置:

  • Data IDnacos-config-demo.properties (规则:${spring.application.name}.${file-extension}
  • GroupDEFAULT_GROUP
  • 配置内容config.info=hello nacos

点击发布。

5. 启动应用并验证

启动 Spring Boot 应用,访问 http://localhost:8080/config/info,页面会显示“hello nacos”。在 Nacos 控制台修改 config.info 的值(比如改为“hello dynamic refresh”),再次访问该接口,会看到结果已经自动更新,无需重启服务。

核心概念详解

Data ID 的命名规则

Data ID 是 Nacos 中配置集的唯一标识,标准格式为:

${prefix}-${spring.profile.active}.${file-extension}
  • prefix:默认为 spring.application.name 的值,可通过 spring.cloud.nacos.config.prefix 自定义
  • spring.profile.active:当前环境配置,如 devprod,若不指定则连接 - 都不会出现
  • file-extension:配置内容的数据格式,支持 propertiesyamlyml

例如应用名为 order-service,环境为 dev,文件类型为 yaml,则 Data ID 为:order-service-dev.yaml

配置加载优先级

Nacos Config 加载配置时遵循以下顺序(优先级由高到低):

  1. -profile 的精确配置:${spring.application.name}-${profile}.${extension}
  2. 不带 -profile 的共享配置:${spring.application.name}.${extension}
  3. 通过 shared-configs 添加的额外共享配置
  4. 通过 extension-configs 添加的扩展配置

后加载的配置会覆盖先加载的相同 key 的值,带 profile 的配置优先级最高。

动态刷新原理

在 Controller 上添加 @RefreshScope 注解,即可让该 Bean 具备动态刷新能力。当 Nacos 客户端的配置监听器检测到远端配置发生变化时,会通过 Spring Cloud 的 RefreshEvent 机制销毁并重新创建标注了 @RefreshScope 的 Bean,从而实现配置的热更新。

@Value 外,还可与 @ConfigurationProperties 配合使用:

@Component
@ConfigurationProperties(prefix = "server")
@RefreshScope
public class ServerConfig {
    private int port;
    private String host;
    // getter/setter
}

多环境配置管理

实际项目中通常需要隔离开发、测试、生产环境的配置。Nacos 结合 spring.profiles.active 能优雅地实现多环境管理。

bootstrap.properties 中指定环境:

spring.profiles.active=dev

Nacos 控制台创建以下两条配置:

  • nacos-config-demo.properties(基础配置)
  • nacos-config-demo-dev.properties(开发环境专用)

启动时应用会同时加载,-dev 中的配置会覆盖基础配置中相同的 key。

命名空间 (Namespace)

命名空间用于实现租户粒度的配置隔离。不同命名空间下可以存在相同的 Group 和 Data ID,适用于不同环境或不同业务的配置完全隔离。

使用步骤

  1. 在 Nacos 控制台“命名空间”页面新建名为 dev 的命名空间,系统会自动生成一个唯一 ID(如 a1b2c3d4-...)。
  2. bootstrap.properties 中配置该命名空间 ID:
spring.cloud.nacos.config.namespace=a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx

此时应用只会拉取 dev 命名空间下的配置。

配置分组 (Group)

Group 用于在同一命名空间内进一步细化配置管理,比如将不同业务模块的配置放在不同 Group 中。默认分组为 DEFAULT_GROUP

bootstrap.properties 中修改分组:

spring.cloud.nacos.config.group=ORDER_GROUP

然后在 Nacos 控制台创建配置时选择对应 Group,应用即可加载。

共享配置和扩展配置

当多个微服务有一些共用的配置(如数据库连接、Redis 地址)时,可以使用 Nacos 的共享配置功能,避免重复配置。

shared-configs(共享配置)

bootstrap.properties 中添加:

spring.cloud.nacos.config.shared-configs[0].data-id=common.properties
spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].refresh=true

以上配置表示共享 common.properties,且支持动态刷新。可以配置多个共享配置,使用下标区分。

extension-configs(扩展配置)

扩展配置的用法类似,但优先级高于共享配置:

spring.cloud.nacos.config.extension-configs[0].data-id=ext.properties
spring.cloud.nacos.config.extension-configs[0].group=EXT_GROUP
spring.cloud.nacos.config.extension-configs[0].refresh=true

配置加载顺序:主配置 > 扩展配置 > 共享配置(均支持 profile 区分)。

最佳实践与注意事项

  • 敏感信息加密:Nacos 原生未提供加密存储,生产环境中建议结合第三方工具(如 Jasypt)对数据库密码等做加密存储。
  • 版本回滚:Nacos 控制台提供配置的版本历史,可一键回滚到指定版本。
  • 监听范围@RefreshScope 会重建整个 Bean,耗性能,建议只在会动态变化的 Bean 上使用,避免滥用。
  • 分布式一致性问题:Nacos 客户端会定时拉取配置(默认 3000ms)并结合长轮询机制,确保配置变更能快速生效。
  • 文件编码:若配置中包含中文,建议将 file-extension 改为 yaml 或设置 Nacos 服务端编码为 UTF-8,避免乱码。

常见问题排查

问题现象 可能原因 解决方案
启动时报 No DataSource set 使用了集群模式直连数据库但未初始化 单机学习使用 -m standalone
配置不生效 Data ID 不匹配或文件扩展名错误 检查 Data ID 是否符合 ${spring.application.name}.${extension} 格式
动态刷新失败 未添加 @RefreshScope@Value 所在类非 Spring 管理 在 Bean 类上添加注解
启动时找不到 Nacos 地址 bootstrap.properties 未生效 检查是否引入了 spring-cloud-context 依赖

总结

通过本教程,你已经掌握了 Nacos 配置中心的核心用法:从单机环境搭建、基础接入,到 Data ID 规则、动态刷新、多环境隔离、命名空间、配置分组以及共享配置的高级特性。在微服务架构实践中,Nacos 凭借其轻量易用和功能强大的特点,已经成为国产分布式配置中心方案的优选。建议在项目中逐步引入,遵循最佳实践,实现配置管理的标准化与自动化。