Java中 System.getenv 怎么在 Spring Boot application.yml 中用 ${ENV_VAR} 读取

Spring Boot 通过 ${ENV_VAR} 以系统环境变量为基础,直接引用底层 System.getenv() 自动集成;全大写+下划线命名,支持默认值 ${MY_API_KEY:default-key},启动前设置生效。

System.getenv() 是 Java 原生获取操作系统环境变量的方法, Spring Boot 的 ${ENV_VAR} 基于占位符的底层 System.getenv()(以及 System.getProperty()PropertySource 等等)来分析-所以你不需要手动调用 System.getenv(),Spring Boot 自动集成。

application.yml 中直接使用 ${ENV_VAR} 就行

Spring Boot 启动时会自动注册系统环境变量 PropertySource,优先级高于 application.yml 本身。只要存在环境变量,就可以在配置文件中使用 ${VAR_NAME} 引用:

  • Linux/macOS 启动前设置:export MY_API_KEY=abc123
  • Windows CMD:set MY_API_KEY=abc123
  • 然后在 application.yml 中写:api.key: ${MY_API_KEY}
支持默认值和嵌套表达式

建议增加默认值,避免因环境变量未设置而导致启动失败:

  • api.key: ${MY_API_KEY:default-key} —— 变量不存在时使用 default-key
  • db.url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/mydb
  • 注:冒号前后不得有空间,否则分析失败
区分大小写和命名规范

环境变量名在 Linux/macOS 默认**全大写+下划线**,对大小写敏感:

Java Linux版

Java Linux版下载入口,提供 Oracle JDK 26.0.2 官方 Linux 安装包、Java 环境配置、JDBC 数据库连接和 Java 服务端开发相关信息。

下载

立即学习“Java免费学习笔记(深入);

  • export DB_URL=jdbc:h2:mem:test${DB_URL}
  • export db_url=...${db_url} ❌(大多数系统不识别小写环境的变量)
  • Spring Boot 会自动把 spring.datasource.url 这种属性映射为 SPRING_DATASOURCE_URL,但是,自定义变量建议统一大写
验证小技巧是否有效

启动后检查实际加载配置:

  • 访问 http://localhost:8080/actuator/env(需启用 actuator),搜索变量名
  • 或在代码中打印:System.out.println(System.getenv("MY_API_KEY"));@Value("${api.key}") String key 对比
  • 如果 ${MY_API_KEY} 首先,确认环境变量是否为空 JVM 启动前设置(不 IDE 临时加入运行配置)
posted @ 2026-08-13 17:15  cmsi  阅读(3)  评论(0)    收藏  举报