Java启动参数说明

前言

公司 springboot 项目运维脚本中的 JVM 配置没生效, 问题是这个东西还是我写的埋下了坑。谨以此记录警示读者。

参数说明

系统参数

系统级全局变量,该参数在程序中任何位置都可以访问到。优先级最高,覆盖程序中同名配置。

系统参数的标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来。

其中,参数名可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如,-Dfile.encoding=UTF-8 用于指定文件编码格式;也可以是用户自定义的,例如,-Dmy=user,程序中可以读取该参数值,执行相关逻辑。

虚拟机系统参数中设置的参数键值对,在程序中可以用 System.getProperty(“propertyName”) 获取对应参数值。

运行参数

main 方法执行时传入的参数值,如果参数有多个,用空格分开。

main 方法的一般格式为:public static void main(String[] args),其中,Stringp[] args 就是存储运行参数的变量,在程序中可以直接使用。

springboot的方式, --key=value方式

eg: java [options] -jar --key=value
取值: @Value("${xxx}")

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@SpringBootApplication
public class ApiDemoApplication {

@Value("${env}")
private String env;

/**
* Java命令的基本格式: java [-options] class [args...]
*
* 示例:
* java -Dsys.args.author=cuishiying -jar -Dsys.args.data=2021 target/api-demo-0.0.1.jar aa bb cc --env=local
*
* 结果:
* 系统参数: sys.args.author=cuishiying
* 系统参数: sys.args.data=2021
* 第0个运行参数为: aa
* 第1个运行参数为: bb
* 第2个运行参数为: cc
* 第3个运行参数为: --env=local
* springboot通过@Value参数=local
*
* @param args 运行参数
*/
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ApiDemoApplication.class, args);
System.out.println(String.format("系统参数: sys.args.author=%s", System.getProperty("sys.args.author")));
System.out.println(String.format("系统参数: sys.args.data=%s", System.getProperty("sys.args.data")));
if (args.length > 0) {
for (int i = 0; i < args.length; i++) {
System.out.println("第" + i + "个运行参数为: " + args[i]);
}
}
System.out.println(String.format("springboot通过@Value参数=%s", applicationContext.getEnvironment().getProperty("env")));
}

}

测试:

1
2
mvn clean package
java -Dsys.args.author=cuishiying -jar -Dsys.args.data=2021 target/api-demo-0.0.1.jar aa bb cc --env=local

输出结果:

1
2
3
4
5
6
7
系统参数: sys.args.author=cuishiying
系统参数: sys.args.data=2021
第0个运行参数为: aa
第1个运行参数为: bb
第2个运行参数为: cc
第3个运行参数为: --env=local
springboot通过@Value参数=local

最后

本文到此结束,感谢阅读。如果您觉得不错,请关注公众号【当我遇上你】,您的支持是我写作的最大动力。