Java程序启动时通过操作系统命令行设置环境变量(如Linux用export、Windows用set或$env:),再执行java -jar;代码中用System.getenv()读取,而非System.getProperty();IDE中需手动配置运行环境变量。

Java程序启动时怎么传入环境变量
不是所有“环境变量”都对Java程序生效——JAVA_HOME 和 PATH 是给系统和JVM自身用的,而你的Java应用真正能读到的,是操作系统级的环境变量(如 MY_API_KEY、ENV=prod),或通过JVM参数/启动脚本显式传入的配置。
Windows命令行直接传环境变量(临时生效)
在CMD或PowerShell中运行Java程序前,用 set(CMD)或 $env:(PowerShell)临时设置,只影响当前终端会话:
- CMD中:先执行
set DATABASE_URL=jdbc:postgresql://localhost:5432/mydb,再运行java -jar myapp.jar - PowerShell中:先执行
$env:DATABASE_URL="jdbc:postgresql://localhost:5432/mydb",再运行java -jar myapp.jar
⚠️ 注意:CMD的 set 不支持等号右边带空格或引号;PowerShell中变量值含空格必须用双引号包裹,且不能有尾部空格。
Linux/macOS用export临时传参
在bash/zsh中,export 设置后立即生效,但仅限当前shell进程:
export LOG_LEVEL=debugexport SPRING_PROFILES_ACTIVE=dev- 然后执行
java -jar app.jar
常见错误:漏掉 export,只写 LOG_LEVEL=debug —— 这只是shell变量,子进程(即java)完全看不到。另外,如果用 sudo java -jar,普通用户设置的环境变量默认不继承,需加 -E: sudo -E java -jar app.jar。
Java代码里怎么读这些变量
别依赖 System.getProperty("xxx") —— 那是JVM系统属性,不是环境变量。正确方式是:
-
System.getenv("DATABASE_URL")→ 读操作系统环境变量 -
System.getProperty("user.home")→ 读JVM启动时内置属性(如user.dir、java.version) - 若想把环境变量转成JVM属性(方便Spring Boot自动绑定),启动时加
-D参数:java -Dspring.profiles.active=$SPRING_PROFILES_ACTIVE -jar app.jar
Spring Boot项目中,SPRING_PROFILES_ACTIVE 环境变量会自动映射为 spring.profiles.active 属性,无需额外加 -D;但自定义变量如 MY_CONFIG_PATH 就得靠 @Value("${my.config.path}") + systemEnvironment 源才能注入。
最易被忽略的一点:IDE(如IntelliJ)里运行Java程序时,它不会自动继承你终端里 export 的变量,必须在Run Configuration里手动填 Environment variables 栏位,否则本地调试永远读不到。


















