idea中Program Arguments (程序参数)和Environment Variables (环境变量)区别

Program Arguments = 启动时传给 main(String[] args) 的参数
Environment Variables = 操作系统层面的环境变量,程序全局可见


1️⃣ Program Arguments(程序参数)

✅ 本质

  • 启动 JVM 时传入

  • 只对当前程序有效

  • 进入 main(String[] args)

📍 IDEA 里填什么?

--spring.profiles.active=dev --port=8081

📥 Java 如何获取?

public static void main(String[] args) {
    System.out.println(args[0]); // --spring.profiles.active=dev
}

📥 Spring Boot 获取方式

@Value("${spring.profiles.active}")
private String profile;

或:

java -jar app.jar --server.port=8081

🧠 典型用途

场景是否推荐
Spring Boot profiles ✅ 强烈推荐
临时启动参数
调试不同端口
敏感信息 ❌ 不推荐

2️⃣ Environment Variables(环境变量)

Image

Image

✅ 本质

  • 操作系统级变量

  • JVM 启动前就存在

  • 对子进程、服务、容器有效

📍 IDEA 里怎么写?

SPRING_PROFILES_ACTIVE=prod;DB_PASSWORD=123456

(Windows 用 ;,Mac/Linux 用 :

📥 Java 如何获取?

String env = System.getenv("SPRING_PROFILES_ACTIVE");

📥 Spring Boot 自动支持

spring:
  profiles:
    active: ${SPRING_PROFILES_ACTIVE}

🧠 典型用途

场景是否推荐
数据库密码
Docker / K8s
CI/CD
多服务共享配置

3️⃣ 核心区别对照表(重点)

对比项Program ArgumentsEnvironment Variables
设置位置 JVM 启动参数 操作系统
作用范围 当前程序 当前进程及子进程
Java 获取方式 args[] System.getenv()
Spring Boot 优先级 ⭐⭐⭐⭐ 高 ⭐⭐⭐ 中
适合敏感信息
是否随系统存在

4️⃣ Spring Boot 中的优先级(你一定会踩坑)

Spring Boot 优先级从高到低

  1. Program Arguments(最高)

  2. JVM 参数 -D

  3. Environment Variables

  4. application.yml

  5. 默认配置

👉 结论

同一个配置,Program Arguments 会覆盖 Environment Variables


5️⃣ 举个你一定遇到过的坑

你在 IDEA 里:

  • Program Arguments:

--spring.profiles.active=dev
  • Environment Variables:

SPRING_PROFILES_ACTIVE=prod

❓ 实际生效的是?

👉 dev(程序参数优先)


6️⃣ 实战建议(很重要)

✅ 我的强烈推荐用法

场景推荐方式
本地调试 Program Arguments
线上部署 Environment Variables
灰度 / 多环境 Environment Variables
Spring profiles Program Arguments(本地)

 

Program Arguments 是“我这次怎么启动程序”
Environment Variables 是“这个运行环境本身是什么样”

posted @ 2026-01-10 20:18  板凳哲学家  阅读(3)  评论(0)    收藏  举报