在日常开发中,很多项目都需要依赖环境变量来区分不同运行环境,比如开发、测试和生产。使用 IntelliJ IDEA 时,如果配置不当,程序可能无法正确读取到系统设置的环境变量,导致启动报错或配置失效。
通过系统环境变量直接读取
Java 程序可以通过 System.getenv() 方法获取操作系统级别的环境变量。例如:
String home = System.getenv("HOME");
String profile = System.getenv("PROFILE");
System.out.println("当前环境:" + profile);
如果在终端中设置了 export PROFILE=dev,然后从终端启动 IDEA,程序就能正常读取到该变量。这是因为 IDEA 继承了父进程(终端)的环境变量。
在 IDEA 中手动配置环境变量
更常见的做法是在 IDEA 的运行配置中直接设置环境变量,这样无需修改系统变量,适合多项目独立配置。
打开项目的 Edit Configurations,在 Environment variables 输入框中添加键值对,例如:
PROFILE=staging
DB_URL=jdbc:mysql://localhost:3306/test_db
LOG_LEVEL=debug
勾选 Include system environment variables 可以保留原有的系统变量,避免覆盖。
使用 .env 文件配合插件管理
对于变量较多的项目,手动填写容易出错。可以安装 EnvFile 插件,支持从 .env 文件加载环境变量。
安装插件后,在运行配置中找到 EnvFile 选项卡,添加文件路径,比如 $ProjectFileDir$/.env。创建 .env 文件内容如下:
APP_PORT=8080
REDIS_HOST=localhost
REDIS_PORT=6379
下次启动应用时,这些变量会自动注入到运行环境中。
Maven 或 Spring Boot 项目中的特殊处理
Spring Boot 项目通常使用 application.yml 动态绑定环境变量,如:
server:
port: ${APP_PORT:8080}
只要 APP_PORT 能被 JVM 读取,就会优先使用环境中的值。Maven 构建时也可以通过 -D 参数传递:
-Dspring.profiles.active=${PROFILE}
确保 IDEA 的运行配置中正确传递了这些系统属性。
验证环境变量是否生效
最简单的验证方式是在主类中打印所有环境变量:
System.getenv().forEach((key, value) -> {
System.out.println(key + " = " + value);
});
运行程序后查看控制台输出,确认目标变量是否存在且值正确。
有时候明明设置了却读不到,可能是拼写错误、大小写不一致,或者被其他配置覆盖。注意 Windows 和 Linux 对变量名大小写处理不同,建议统一使用大写命名。