上一期咱们聊了 SpringBoot 本地多环境配置,但在微服务场景下,本地配置文件的问题就暴露了:

  • 几十上百个服务,改个配置要逐个改文件、重启服务,效率低到离谱;

  • 生产环境配置散落在各个服务里,版本不一致、管理混乱;

  • 想改个日志级别、调个连接池参数,必须重启服务,影响线上可用性。

这时候就需要分布式配置中心——把所有服务的配置集中管理,支持多环境、一键切换、动态刷新(改配置不用重启服务)。今天就手把手教你用两款主流配置中心:Nacos(阿里开源,轻量易上手)和 Apollo(携程开源,功能更全),从环境搭建到集成 SpringBoot,一步到位。

先搞懂核心逻辑:分布式配置中心解决啥问题?

不管是 Nacos 还是 Apollo,核心价值就 3 点:

  1. 配置集中管理

    :所有服务的配置都存在配置中心,不用散落在各个服务里;

  2. 多环境统一管控

    :dev/test/prod 配置在配置中心一键切换,不用改本地文件;

  3. 配置动态刷新

    :改完配置后,服务自动感知并生效,无需重启。

先明确今天的实战目标:

  • 搭建 Nacos/Apollo 配置中心环境;

  • SpringBoot 项目集成配置中心,读取多环境配置;

  • 改配置中心的配置,SpringBoot 服务不重启就能生效。


Nacos 配置中心

Nacos 是阿里开源的微服务组件,既做配置中心也做注册中心,轻量、易部署,新手半小时就能搭起来。

第一步:搭建 Nacos 服务端
  1. 下载 Nacos


    去 Nacos 官网(https://nacos.io/zh-cn/docs/quick-start.html)下载稳定版(比如 2.3.2),解压到本地。

  2. 启动 Nacos

  • Windows:双击 bin/startup.cmd

  • Linux/Mac:执行 sh bin/startup.sh -m standalone(单机模式,不用配集群)。

  • 访问控制台


    打开浏览器输入 http://localhost:8848/nacos,默认账号密码都是 nacos/nacos,登录后就能看到配置中心界面。

  • 第二步:在 Nacos 里配置多环境配置
    1. 创建命名空间(隔离多环境)


      左侧「命名空间」→ 「新建命名空间」:

    • 开发环境:命名空间 ID 填 dev,名称填「开发环境」;

    • 测试环境:命名空间 ID 填 test,名称填「测试环境」;

    • 生产环境:命名空间 ID 填 prod,名称填「生产环境」。
      ⚠️ 命名空间是 Nacos 隔离环境的核心,不同环境的配置放在不同命名空间里。

  • 添加配置集(对应 SpringBoot 配置)


    切换到「开发环境」命名空间 → 「配置管理」→「配置列表」→「新建配置」:```yaml server:   port: 8080 spring:   datasource:     url: jdbc:mysql://192.168.1.100:3306/dev_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai     username: dev_root     password: dev_123456 logging:   level:     root: DEBUG ``` 同理,在 test/prod 命名空间里分别添加相同 Data ID 的配置,只改对应环境的参数。

    • Data ID:multi-env-demo.yml(必须和 SpringBoot 应用名+后缀一致);

    • 配置格式:YAML;

    • 配置内容(和本地 dev 配置一致):

    第三步:SpringBoot 集成 Nacos 配置中心
    1. 加依赖

      (pom.xml):```xml com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config2023.0.1.0```

    2. 创建 bootstrap.yml


      SpringBoot 启动时,会先加载 bootstrap.yml(优先级高于 application.yml),用来连接 Nacos 配置中心:```yaml spring:   application:     name: multi-env-demo  # 必须和 Nacos 里的 Data ID 前缀一致   cloud:     nacos:       config:         server-addr: localhost:8848  # Nacos 服务端地址         file-extension: yml  # 配置文件格式         namespace: dev  # 激活的环境(dev/test/prod) ```

    3. 删除本地的 application.yml 环境配置


      所有配置都从 Nacos 读取,本地只留 bootstrap.yml 即可。

    第四步:实现配置动态刷新

    想让配置改了之后自动生效,只需要在读取配置的类上加 @RefreshScope 注解:

    1importorg.springframework.beans.factory.annotation.Value;
    2importorg.springframework.cloud.context.config.annotation.RefreshScope;
    3importorg.springframework.web.bind.annotation.GetMapping;
    4importorg.springframework.web.bind.annotation.RestController;
    5
    6@RestController
    7@RefreshScope// 关键注解:开启配置动态刷新
    8publicclassConfigController{
    9
    10// 读取 Nacos 里的 server.port 配置
    11@Value("${server.port}")
    12privateString port;
    13
    14// 读取 Nacos 里的数据库用户名配置
    15@Value("${spring.datasource.username}")
    16privateString dbUsername;
    17
    18@GetMapping("/config")
    19publicStringgetConfig(){
    20return"当前端口:"+ port +",数据库用户名:"+ dbUsername;
    21}
    22}

    测试:

    1. 启动 SpringBoot 服务,访问 http://localhost:8080/config,返回 dev 环境的配置;

    2. 去 Nacos 控制台修改 dev 命名空间里的 server.port 为 8081;

    3. 不用重启服务,再次访问 /config,端口已经变成 8081(配置动态生效)。


    Apollo 配置中心

    Apollo 是携程开源的配置中心,功能比 Nacos 更丰富(权限管控、配置发布审核、灰度发布),适合中大型团队,缺点是部署稍复杂。

    第一步:搭建 Apollo 服务端(快速启动)

    Apollo 官方提供了一键启动脚本(适合开发测试),直接执行:

    1# 克隆 Apollo 快速启动仓库
    2git clone https://github.com/apolloconfig/apollo-build-scripts.git
    3cd apollo-build-scripts
    4# 一键启动 Apollo(会自动启动 MySQL 和 Apollo 服务)
    5sh startup.sh

    启动后访问 http://localhost:8070,默认账号 apollo/admin,登录后进入控制台。

    第二步:在 Apollo 里配置多环境配置
    1. 创建项目


      「创建项目」→ 填写项目信息(应用 ID 填 multi-env-demo)→ 选择「多环境部署」(默认 dev/test/prod)。

    2. 配置多环境参数


      进入项目 → 切换到「dev 环境」→「配置管理」→「新增配置」:

    • Key:server.port,Value:8080

    • Key:spring.datasource.username,Value:dev_root
      批量添加完后「发布配置」,同理配置 test/prod 环境。

    第三步:SpringBoot 集成 Apollo 配置中心
    1. 加依赖

      (pom.xml):```xml com.ctrip.framework.apolloapollo-client2.0.0```

    2. 配置 application.yml

      :```yaml app:   id: multi-env-demo  # 必须和 Apollo 里的应用 ID 一致 apollo:   meta: http://localhost:8080  # Apollo 服务端地址   bootstrap:     enabled: true  # 开启 Apollo 引导     namespaces: application.yml  # 配置命名空间   active: dev  # 激活的环境 ```

    3. 动态刷新配置


      Apollo 自带配置动态刷新,无需加额外注解,修改 Apollo 里的配置并发布后,1秒内就能在 SpringBoot 服务里生效。


    Nacos vs Apollo 怎么选?

    维度

    Nacos

    Apollo

    部署难度

    低(单机一键启动)

    中(需依赖 MySQL,配置稍多)

    核心功能

    配置中心 + 注册中心(二合一)

    纯配置中心(功能更细)

    动态刷新

    需加 @RefreshScope 注解

    自动刷新,无需注解

    权限管控

    基础权限

    细粒度权限(角色/审批流)

    适用场景

    中小团队、微服务快速落地

    中大型团队、生产环境高要求场景

    必避的 5 个坑
    1. Nacos 没建命名空间,配置混乱


      把所有环境的配置都放默认命名空间,导致环境隔离失效;
      解决:严格按 dev/test/prod 创建命名空间,不同环境用不同命名空间。

    2. SpringBoot 没加载 bootstrap.yml


      Nacos 配置读不到,因为 SpringBoot 2.4+ 后默认关闭了 bootstrap 加载;
      解决:加依赖 spring-cloud-starter-bootstrap,或在 application.yml 里开启。

    3. Apollo 环境名写错


      把 apollo.active=prod 写成 apollo.active=production,导致配置读不到;
      解决:Apollo 环境名固定为 dev/test/prod,别自定义。

    4. 动态刷新没生效


      Nacos 集成后改配置不生效,因为没加 @RefreshScope
      解决:在读取配置的 Controller/Service 上加该注解。

    5. 生产环境配置中心地址泄露


      把 Nacos/Apollo 生产地址写在代码里;
      解决:通过环境变量传递配置中心地址,比如 APOLLO_META=http://prod-apollo:8080

    分布式配置中心是微服务的“标配”,不管选 Nacos 还是 Apollo,核心都是解决「配置集中管理 + 动态刷新 + 多环境隔离」的问题:

    • 中小团队/快速落地:选 Nacos,二合一(配置+注册),部署简单;

    • 中大型团队/生产高要求:选 Apollo,权限、审核、灰度发布更完善。

    下一期,咱们会讲:配置中心的高级玩法——配置加密(数据库密码等敏感配置加密存储)、配置发布审计、灰度发布,进一步保障生产环境配置安全。

    如果这篇文章帮你搞定了分布式配置中心,麻烦点个赞、在看,关注我,后续还有更多微服务实战技巧,从入门到精通~


Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐