Nacos配置中心避坑指南:灵活配置 server-addr 的坑

Nacos 3.x 优势介绍及接入指南

固定地址配置

在SpringCloud + Nacos的配置中,单环境配置还是比较简单的,application.yml 中配置如下:

bash 复制代码
application.yml 

spring:
  application:
      name: myapp
#  profiles:
#    active: dev
#    active: pre
  config:
    import:
      - nacos:nacos-config-example.properties?refreshEnabled=true
      # yml格式的文件必须加.yml后缀
      - nacos:sysconfig.yml?refreshEnabled=true
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 # 换成你的IP
        username: nacos
        password: nacos

环境隔离配置

但是如果需要进行环境隔离,想要在 dev 和 pre 环境中连接到不同的 nacos 服务地址,该如何配置呢? 你可能想到了,分别新建一个 application-dev.yml 和 application-pre.yml 文件,将spring.cloud.nacos.config.server-addr 在各自的环境中分别配置,于是有了下面三个配置文件:

bash 复制代码
application.yml 

spring:
  application:
      name: myapp
  profiles:
#    active: dev
    active: pre
  config:
    import:
      - nacos:nacos-config-example.properties?refreshEnabled=true
      # yml格式的文件必须加.yml后缀
      - nacos:sysconfig.yml?refreshEnabled=true
XML 复制代码
application-dev.yml

spring:
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # 本地开发环境
        username: nacos
        password: nacos
XML 复制代码
application-pre.yml

spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.1.221:8848 # 测试环境
        username: nacos
        password: nacos

错误信息:

但是这样配置的话 applicatioin-pre.yml 中的server-addr 并不会生效。此时启动的话会看到如下错误:

14:33:30.475 main INFO com.alibaba.nacos.plugin.auth.spi.client.ClientAuthPluginManager -- ClientAuthPluginManager Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success.

14:33:30.476 main INFO com.alibaba.nacos.plugin.auth.spi.client.ClientAuthPluginManager -- ClientAuthPluginManager Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success.

2026-04-20T14:33:35.373+08:00 INFO 1 --- heyou-rag remote.worker.1 c.a.n.c.remote.client.grpc.GrpcClient : grpc client connection server: 127.0.0.1 ip, serverPort: 9848, grpcTslConfig: {"enableTls":false,"mutualAuthEnable":false,"trustAll":true}

2026-04-20T14:33:35.376+08:00 ERROR 1 --- heyou-rag remote.worker.1 c.a.n.c.remote.client.grpc.GrpcClient : Server check fail, please check server 127.0.0.1, port 9848 is available, error ={}

java.util.concurrent.ExecutionException: com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:594) ~nacos-client-3.0.3.jar!/:na

at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:469) ~nacos-client-3.0.3.jar!/:na

at com.alibaba.nacos.common.remote.client.grpc.GrpcClient.serverCheck(GrpcClient.java:234) ~nacos-client-3.0.3.jar!/:na

报错原因:

这是因为从 Spring Cloud Alibaba 2025.1.x 版本开始,已不再支持 bootstrap.yml/properties 文件。你需要将配置直接写入 application.yml 或 application.properties 中。 并且推荐通过spring.config.import 方式导入Nacos配置。系统启动时当加载到有 nacos:xxx 的配置文件需要引入时,就会立刻触发 NacosConfigManager 和底层 NacosClient 的初始化,进而建立与 Nacos Server 的连接(包括 gRPC 9848 端口)。这就导致 Nacos客户端(特别是作为配置中心时)的初始化早于 Spring Boot 常规配置文件(如 application-{profile}.yml)的加载。因此它只能使用application.yml文件中的配置,如果没有找到 server-addr ,就会自动采用默认地址:127.0.0.1:8848(当然gRPC端口会+1000,得到9848)

解决方案:

知道了问题的原因那解决方法就简单了,我们可以把 spring.config.import : nacos:xxx 的配置和spring.cloud.nacos.config.server-addr 属性一起分别配置到 application-{profile}.yml 文件中,这样就不会在刚加载主文件时就去初始化 NacosClient了。修改后配置如下:

bash 复制代码
application.yml 

spring:
  application:
      name: myapp
  profiles:
#    active: dev
    active: pre
XML 复制代码
application-dev.yml

spring:
  config:
    import:
      - nacos:nacos-config-example.properties?refreshEnabled=true
      # yml格式的文件必须加.yml后缀
      - nacos:sysconfig.yml?refreshEnabled=true
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # 本地开发环境
        username: nacos
        password: nacos
XML 复制代码
application-pre.yml

spring:
  config:
    import:
      - nacos:nacos-config-example.properties?refreshEnabled=true
      # yml格式的文件必须加.yml后缀
      - nacos:sysconfig.yml?refreshEnabled=true
  cloud:
    nacos:
      config:
        server-addr: 192.168.1.221:8848 # 测试环境
        username: nacos
        password: nacos
相关推荐
NJCloud14 小时前
MooseFS 分布式存储部署与高可用架构实践
linux·运维·分布式·架构
zcmodeltech14 小时前
钢铁冶金沙盘模型控制系统设计与实现:高炉-连铸-热轧多工序联动方案
分布式·stm32·单片机·嵌入式硬件·交互
肠畔码农19 小时前
深度解密 Redis 分布式锁:从单机原子语义到集群架构博弈
redis·分布式·架构
小张同学a.1 天前
Hadoop 分布式集群实战 1—— 集群搭建与在线扩容
大数据·hadoop·分布式
小的~~1 天前
面试被问分布式锁,我差点语塞…直到搞懂了Redis、ZooKeeper和etcd的“三国杀”
redis·分布式·面试
武科大许志伟1 天前
从并行进化到分布式进化计算读 A Survey on Distributed Evolutionary Computation
人工智能·分布式·演化计算
国科安芯2 天前
ASL706S:让 MCU 不再“失忆跑飞“的守护芯片
分布式·单片机·嵌入式硬件·安全·fpga开发·架构
阿无,2 天前
RabbitMQ面试题
分布式·rabbitmq
成为你的宁宁2 天前
【APISIX:部署、路由与 Nacos 集成】
微服务·nacos·apisix·api网关
盛世宏博智慧档案2 天前
全国100个分布式机房环境温湿度智能监测系统建设方案
分布式·机房·温湿度