Nacos 作为一款集成了服务注册发现与配置管理功能的平台,为微服务架构的构建提供了极大便利。本文将以 Spring Boot 应用为例,聚焦于 Nacos 配置中心的核心使用场景,带你从基础配置到多环境、业务隔离等高级功能进行实操。
新建配置与动态刷新
启动 Nacos 服务后,访问其控制台,进入“配置管理” -> “配置列表”页面。

点击列表右上角的“+”按钮,即可进入新建配置页面。

其中,Data ID 的命名遵循特定规则,其完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
各部分说明如下:
- prefix:默认为
spring.application.name 的值。你也可以通过在配置文件中设置 spring.cloud.nacos.config.prefix 来自定义。
- spring.profiles.active:代表当前应用激活的环境(profile)。
注意:当 spring.profiles.active 为空时,中间的连接符 - 也会省略,Data ID 格式将变为 ${prefix}.${file-extension}。
- file-extension:配置内容的文件格式,目前支持
properties 和 yaml(或 yml)。可通过 spring.cloud.nacos.config.file-extension 配置。
例如,我们创建一个简单的配置,用于控制是否使用本地缓存。

假设激活的 spring.profiles.active 为 dev,那么在 Spring Boot 应用的 bootstrap.properties 中需要进行如下基础配置:
spring.application.name=nacos-producer
spring.cloud.nacos.config.file-extension=properties
接下来,在应用中创建一个 Controller 来读取这个配置,并验证其动态刷新能力。
@Controller
@RequestMapping("config")
@RefreshScope
public class ConfigController {
@Value("${useLocalCache}")
private boolean useLocalCache;
@RequestMapping(value = "/get", method = GET)
@ResponseBody
public boolean get() {
return useLocalCache;
}
}
访问 http://localhost:8083/config/get,页面会返回 true。此时,如果你在 Nacos 控制台修改 useLocalCache 的值并发布,无需重启应用,再次访问该接口,返回值会立即随之改变。这正是 @RefreshScope 注解的作用,它赋予了应用动态刷新配置的能力,这在 微服务架构 中至关重要。
基于 Namespace 实现多环境隔离
在实际开发中,我们通常需要区分开发(dev)、测试(test)、生产(prod)等多套环境。Nacos 通过 Namespace (命名空间) 的概念来实现环境与租户粒度的配置隔离。官方对命名空间的描述是:用于进行租户粒度的配置隔离,其常用场景之一便是区分开发测试与生产环境的资源。
Nacos 默认提供了一个名为 public 的命名空间。要管理命名空间,可以从左侧菜单进入。

点击“新增命名空间”,即可创建新的环境。命名空间 ID 可以不填,系统会自动生成一个唯一的 ID。

创建了多个命名空间(如 dev, test, prod)后,回到“配置列表”页面,你会发现顶部出现了环境切换标签。

选择 dev 命名空间,然后添加一个配置,例如 testnamespace=dev。

由于我们使用了非默认的命名空间,必须在应用的 bootstrap.properties 中明确指定所使用的命名空间 ID。
spring.cloud.nacos.config.namespace=ad0738cd-b595-4885-a4e5-03f547d11fa0
在 Controller 中增加对应字段的读取:
@Value("${testnamespace}")
private String testnamespace;
@RequestMapping(value = "/getEnv", method = GET)
@ResponseBody
public String getEnv() {
return testnamespace;
}
访问 http://localhost:8083/config/getEnv,页面会返回 dev,证明应用成功读取了指定命名空间下的配置。这种清晰的环境隔离能力,是构建稳健 云原生 应用的基础。
基于 Group 实现业务配置隔离
假设你维护着两个不同的业务服务:ServiceA 和 ServiceB。它们可能拥有同名的配置项(如 database_url),但值不同。如何实现隔离?Nacos 提供了 Group (配置分组) 的维度。
Group 是对配置集的逻辑分组,默认组为 DEFAULT_GROUP。它常用于区分 Data ID 相同但属于不同应用或组件的配置。
例如,我们可以为 ServiceA 和 ServiceB 分别创建 Group 为 serviceA 和 serviceB 的数据库配置。下图是为 ServiceB 创建配置的示例:

配置完成后,在列表页可以看到两个 Data ID 同为 datasource,但 Group 不同的配置项。

此时,ServiceA 的应用需要在 bootstrap.properties 中指定它所属的 Group:
spring.cloud.nacos.config.group=serviceA
在 Controller 中添加读取该配置的代码:
@Value("${spring.datasource.max-idle}")
private String maxIdle;
@RequestMapping(value = "/getMaxIdle", method = GET)
@ResponseBody
public String getMaxIdle() {
return maxIdle;
}
访问 http://localhost:8083/config/getMaxIdle,页面将返回 ServiceA 组下配置的值 10。这种分组机制,使得业务间的配置管理既独立又清晰,是管理复杂 技术栈 配置的利器。
共享配置
某些通用配置(如公共组件参数)可能需要在多个应用间共享。Nacos 支持配置共享功能。
假设我们有两个公共配置:serviceA.properties 和 serviceB.properties。

serviceA.properties 内容:
spring.datasource.max-idle=10
serviceB.properties 内容:
spring.datasource.min-idle=5
现在,有一个新的应用想要同时加载这两个配置,只需在其 bootstrap.properties 中通过 shared-configs 进行声明:
spring.cloud.nacos.config.shared-configs[0].dataId=serviceA.properties
spring.cloud.nacos.config.shared-configs[0].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].refresh=true
spring.cloud.nacos.config.shared-configs[1].dataId=serviceB.properties
spring.cloud.nacos.config.shared-configs[1].group=DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[1].refresh=true
应用启动后,访问 http://localhost:8083/config/getMaxIdle 和 http://localhost:8083/config/getMinIdle(需事先在 Controller 中实现对应方法),将分别返回 10 和 5。
重要提示:共享配置的 Data ID 必须包含完整的文件后缀(如 .properties 或 .yaml),否则应用将无法正确加载。
总结
本文详细介绍了 Nacos 配置中心的核心功能。从最基本的配置创建与动态刷新,到利用 Namespace 实现多环境/多租户配置隔离,再到通过 Group 完成不同业务线间的配置隔离,最后探讨了跨应用的 共享配置 能力。可以看到,作为一款优秀的 微服务 中间件,Nacos 配置中心的功能设计非常完备,能够灵活应对各种复杂的业务场景,极大地提升了配置管理的效率和可靠性。希望这篇实战指南能帮助你在项目中更好地驾驭 Nacos。如果你想了解更多技术实践与深度讨论,欢迎访问 云栈社区 与更多开发者交流。