环境变量是最高优先级的外部配置方式,Spring Boot默认按大写+下划线规则映射嵌套属性并覆盖配置文件,本地可用.env文件安全加载,纯Java需手动实现多级兜底读取,生产环境应通过容器或云平台注入且避免配置文件硬编码敏感信息。

环境变量是配置管理中最优先级的外部输入方式之一,它天然具备“运行时生效、无需改代码、不提交到仓库”的优势。只要在启动前正确设置,Spring Boot 或纯 Java 应用都能直接读取并覆盖配置文件中的同名参数。
环境变量怎么覆盖配置文件
Spring Boot 默认将操作系统环境变量纳入配置源(PropertySource),且其优先级高于 application.yml 和 application.properties。关键在于命名规范:
- 环境变量名需转为大写,用下划线分隔,例如
spring_profiles_active对应spring.profiles.active - 嵌套属性如
spring.datasource.url要写成SPRING_DATASOURCE_URL - 若使用
@Value("${xxx}")或@ConfigurationProperties,Spring 会自动解析匹配的环境变量
本地开发时如何安全使用 .env 文件
IDEA 等工具支持自动加载项目根目录下的 .env 文件,并将其注入为进程环境变量。这样既避免硬编码,又防止敏感信息泄露:
- 在项目根目录新建
.env,内容如:DB_URL=jdbc:mysql://localhost:3306/test - 确保
.gitignore包含.env,禁止提交 - 在 IDEA 的 Run Configuration 中勾选 “Load environment variables from .env file”
- 启动后,
System.getenv("DB_URL")和 Spring 的${db.url}均可获取该值
非 Spring 环境下手动实现多级覆盖
纯 Java 应用不自动识别环境变量,需自行封装读取逻辑。推荐按“环境变量 → JVM 属性 → 配置文件”顺序兜底:
- 先调用
System.getenv(key),存在则直接返回 - 未命中再查
System.getProperty(key)(即 -D 参数) - 最后 fallback 到
Properties.load()加载配置文件 - 可封装成工具方法,统一管理所有配置项的获取路径
生产部署时的注意事项
容器或云平台中设置环境变量更常见,但要注意作用域和大小写细节:
- Kubernetes 中通过
env:或envFrom:注入,变量名必须全大写+下划线 - Docker 运行时用
-e DB_PASSWORD=xxx,等价于系统环境变量 - 某些平台(如 AWS ECS)会自动转换短横线为下划线,但并非全部,建议始终用标准命名
- 避免在配置文件里写死敏感值,所有密码、密钥类参数应只通过环境变量提供
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











