程序员如何做「配置管理」:不是硬编码,是灵活
配置管理是系统灵活性的基础。
好的配置管理让系统可以在不重新部署的情况下改变行为,不好的配置是硬编码的噩梦。
一、配置的类型
1. 环境配置
- 开发环境 dev
- 测试环境 test
- 预发布环境 staging
- 生产环境 production
2. 应用配置
- 数据库连接
- 缓存配置
- 日志级别
- 功能开关
3. 业务配置
- 业务规则
- 阈值参数
- 策略配置
4. 敏感配置
- 数据库密码
- API 密钥
- 第三方凭证
二、配置管理的方式
1. 配置文件
- properties、yaml、json、toml
- 放在代码仓库
- 环境区分:application-dev.yml、application-prod.yml
2. 环境变量
- 容器化环境常用
- 不放在代码里
- 敏感信息用环境变量
3. 配置中心
- Apollo、Spring Cloud Config、Nacos
- 动态更新配置
- 实时生效,不用重启
4. 密钥管理
- HashiCorp Vault
- AWS Secrets Manager
- 敏感信息专用
三、配置管理的原则
1. 环境分离
本地、开发、测试、生产要严格分离。
2. 敏感信息脱敏
密码、密钥不要明文写进代码。
3. 集中管理
所有配置集中在配置中心,方便管理。
4. 可追溯
配置变更要记录,谁改的、什么时候改的、改了什么。
四、好用的配置管理实践
1. 十二要素(12-Factor App)
- 配置存储在环境变量
- 代码和配置分离
- 构建、发布、运行严格分离
2. 配置分层
- 公共配置
- 环境特定配置
- 本地覆盖配置
3. 配置模板化
- 使用占位符
- 环境变量替换
五、常见错误
❌ 硬编码
数据库地址、API 地址写死在代码里。
❌ 配置文件放密码
密码明文写在配置文件里。
❌ 配置不区分环境
dev 和 prod 用同一套配置。
❌ 改了配置不记录
配置改了不知道谁改的,改了什么。
六、一句话总结
配置管理 = 环境配置 + 应用配置 + 业务配置 + 敏感配置,集中管理 + 敏感脱敏 + 可追溯。