配置中心:Nacos Config 使用与多环境

服务一多,配置管理立刻变难:同一份配置散落在几十个工程的 yml 里,改一个参数要全量发布;dev/test/prod 的环境差异全靠手工维护。配置中心把配置从代码里"抽出来"集中管理,并支持动态下发。Nacos 注册中心与配置中心一体,本章继续沿用第 03 章部署的 Nacos Server。

为什么要独立配置中心

集中管理(一处修改、多处生效)、环境隔离(dev/test/prod 各一套)、动态刷新(第 12 章)、权限与审计(谁能改、何时改)是配置中心的四大价值。需要说明的是,工程里仍会保留 application.yml,只是把"随环境变化的、可能需要动态调整的"配置搬到 Nacos,二者职责分离。

引入依赖

在需要接入配置的工程(以 order-service 为例)中引入:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

用 spring.config.import 接入

新版 Spring Cloud Alibaba 推荐在 application.yml 里用 config import 方式声明要加载的 Nacos 配置,optional 表示 Nacos 不可用时本地仍可启动(便于本地开发):

spring:
  application:
    name: order-service
  config:
    import: optional:nacos:order-service.yaml
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml

dataId 的默认命名规则是 {spring.application.name}.{file-extension},上例即读取 dataId 为 order-service.yaml 的配置。老资料里常见的 bootstrap.properties + spring-cloud-starter-bootstrap 方案属于历史兼容路径,新工程优先使用 config import。

多环境:profile 与命名空间

两种常用隔离手段,可叠加使用:

  • Profile:激活 profile 后优先读取 {name}-{profile}.{file-extension},例如激活 prod 时先读 order-service-prod.yaml 再读 order-service.yaml,前者覆盖后者同名键。用 spring.profiles.active 切换。
  • 命名空间(namespace):在 Nacos 控制台按 dev/test/prod 各建一个命名空间,客户端通过 spring.cloud.nacos.config.namespace 指向对应命名空间的 ID,实现物理隔离,适合"同一套 Nacos 服务多环境共用"的部署。

推荐组合:环境差异用命名空间或 profile 表达,公共配置用共享配置,避免每个环境维护一份几乎相同的文件。

共享配置

多个服务都要读的公共配置(Redis 地址、公共开关)用 shared-configs 引入:

spring:
  cloud:
    nacos:
      config:
        shared-configs:
          - data-id: common.yaml
            group: DEFAULT_GROUP
            refresh: true     # 公共配置也支持动态刷新

注意老版本资料里的 extension-configs 已被 shared-configs 取代,写法以当前官方文档为准。同名配置的覆盖优先级需要结合具体接入方式确认,建议工程内做一次实测记录,避免"本地改了半天不生效"的困惑。

在控制台发布配置

登录 Nacos 控制台,在"配置管理/配置列表"中新建 dataId 为 order-service.yaml 的配置,内容为 YAML 格式,如 timeout: 5000。应用启动时会拉取该配置,通过 @Value("${timeout:5000}") 即可读取。控制台提供历史版本与回滚能力,改错配置可以快速还原,这是"配置即代码"之外的重要安全网。

小结

接入 Nacos Config 只需三步:加依赖、配 server-addr 与 dataId、在控制台发布配置。多环境用 profile/命名空间组织,公共配置走 shared-configs。配置中心真正的杀手锏是"改了立即生效",下一章详细讲动态刷新的原理与边界。

笔记加载中…