IntelliJ IDEA 如何正确读取环境变量

在日常开发中,很多项目都需要依赖环境变量来区分不同运行环境,比如开发、测试和生产。使用 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 对变量名大小写处理不同,建议统一使用大写命名。