推荐在命令行前置变量运行java -jar,如my_api_key=abc123 java -jar app.jar;值含空格时用单引号包裹;脚本中宜用export+exec;禁用source .env;java中需判空且注意大小写。

直接在命令行前置变量(推荐)
运行 java -jar 时,最安全、最轻量的方式是把环境变量写在命令前面:
- MY_API_KEY=abc123 DB_URL=jdbc:h2:mem:testdb java -jar app.jar
- Shell 会自动将这些变量注入到本次 Java 进程的环境,不影响当前终端其他命令
- 值中不含空格或特殊字符时,不要加引号(如
KEY=value),避免某些 Shell 解析异常 - 若值含空格(如路径),用单引号包裹:
HOME_DIR='/Users/my name/app' java -jar app.jar
在启动脚本中显式导出(适合复用场景)
当需要多次使用同一组变量,或后续还要执行其他命令(如日志归档、健康检查),可写成小脚本:
- Linux/macOS:
run.sh内容示例: #!/bin/bash<br>export MY_API_KEY="abc123"<br>export DB_URL="jdbc:h2:mem:testdb"<br>exec java -jar app.jar
- 注意用 exec 替换当前 shell 进程,避免残留 shell 占用资源
- Windows 批处理(
run.bat)可类似处理,但需用set而非export,且变量作用域仅限当前批处理
避免通过 .env 文件 source(风险高)
不建议在脚本里写 source .env && java -jar,原因包括:
-
.env若误写export PATH=...可能覆盖系统 PATH,导致java命令找不到 -
source在/bin/sh下不可用,跨 Shell 兼容性差 - 变量一旦导入,就对整个脚本生命周期可见,缺乏隔离,不符合最小权限原则
- 若多人协作,.env 容易误提交敏感信息(应加进
.gitignore)
Java 代码中读取要防空与大小写
在程序里用 System.getenv() 获取时,必须注意:
- 返回值可能为 null,务必判空:
String key = System.getenv("MY_API_KEY"); if (key != null) { ... } - Windows 下变量名通常不区分大小写,但 Linux/macOS 严格区分;统一用大写命名(如
PUBLIC、PATH)更稳妥 - 不要试图修改
System.getenv()返回的 Map —— 它只是启动时的只读快照,改了也无效 - 若需运行时动态配置,改用
System.setProperty("key", "value")或启动参数-Dkey=value
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











