server-addr: ${NACOS_HOST:192.168.1.223}:${NACOS_PORT:8838}- ${NACOS_HOST:192.168.1.223}首先尝试获取环境变量/系统属性 NACOS_HOST 的值如果 NACOS_HOST 不存在或为空,则使用默认值 192.168.1.223
- ${NACOS_PORT:8838}首先尝试获取环境变量/系统属性 NACOS_PORT 的值如果 NACOS_PORT 不存在或为空,则使用默认值 8838
- 组合结果最终拼接成完整的 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好处:
- 环境隔离:不同环境(开发/测试/生产)使用不同配置
- 安全:敏感信息不写入代码
- 灵活:无需修改配置文件即可切换环境
- 容器友好:适合 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}这种配置方式体现了 "配置外部化" 和 "约定优于配置" 的最佳实践。