关于这个yml中的nacos配置



server-addr: ${NACOS_HOST:192.168.1.223}:${NACOS_PORT:8838}


  1. ${NACOS_HOST:192.168.1.223}首先尝试获取环境变量/系统属性 NACOS_HOST 的值如果 NACOS_HOST 不存在或为空,则使用默认值 192.168.1.223


  1. ${NACOS_PORT:8838}首先尝试获取环境变量/系统属性 NACOS_PORT 的值如果 NACOS_PORT 不存在或为空,则使用默认值 8838
  2. 组合结果最终拼接成完整的 Nacos 地址,如:192.168.1.223:8838



场景1:使用默认值(开发环境)

如果没有设置环境变量,直接使用默认值:

yaml

# 结果为:192.168.1.223:8838
server-addr: 192.168.1.223:8838

场景2:通过环境变量配置(生产环境/容器化)

bash

# 设置环境变量
export NACOS_HOST=10.0.0.100
export NACOS_PORT=8848

yaml
# 结果为:10.0.0.100:8848
server-addr: 10.0.0.100:8848


场景3:通过JVM参数配置

bash

# 启动时指定
java -jar app.jar -DNACOS_HOST=10.0.0.100 -DNACOS_PORT=8848

场景4:Docker部署时

dockerfile

# Dockerfile
ENV NACOS_HOST=10.0.0.100
ENV NACOS_PORT=8848




yaml
# docker-compose.yml
environment:
  - NACOS_HOST=10.0.0.100
  - NACOS_PORT=8848

好处:

  1. 环境隔离:不同环境(开发/测试/生产)使用不同配置
  2. 安全:敏感信息不写入代码
  3. 灵活:无需修改配置文件即可切换环境
  4. 容器友好:适合 Docker/K8s 等容器化部署

类似用法:

yaml

# 数据库配置
datasource:
  url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/mydb
  
# Redis配置
redis:
  host: ${REDIS_HOST:127.0.0.1}
  port: ${REDIS_PORT:6379}

这种配置方式体现了 "配置外部化""约定优于配置" 的最佳实践。