三种启动传参方式的区别
1.三种方式分别是什么?
idea中经常看到下面三种启动传参方式
- 优先级
Program arguments > VM options > Environment variable > 系统默认值
2.参数说明
2.1、VM options
VM options其实就是我们在程序中需要的运行时环境变量,它需要以-D或-X或-XX开头,每个参数使用空格分隔使用最多的就是-Dkey=value设定系统属性值,比如-Dspring.profiles.active=dev3
- 添加参数方法
// -D开头 + 参数名 = 参数值
// = 两侧没有空格
// 不同参数之间空格分隔
// 如下所示我们增加两个参数 Env 和 Name
-DEnv=prod -DName=admin
- 获取参数方法
// System.getProperty("参数名")
System.getProperty("Env");
System.getProperty("Name");
2.2、Program arguments
Program arguments为我们传入main方法的字符串数组args[],它通常以--开头,如--spring.profiles.active=dev3,等价于-Dspring.profiles.active=dev3如果同时存在,以Program arguments配置优先。
- 添加参数方法
// Program arguments有两种类型,一种是以--key=value的形式;一种是直接写value
// 参数之间空格分隔
--mode=debug test
- 获取参数方法
2.3、Environment variables
Environment variables没有前缀,优先级低于VM options,即如果VM options有一个变量和Environment variable中的变量的key相同,则以VM options中为准。
- 添加方法
// 参数名=参数值
// 多个参数之间使用分号分隔(注意这里不是用空格分隔)
password=123456;name=admin
- 获取方法
// System.getenv("参数名")
System.getenv("password");
System.getenv("name");