Java程序命令行参数用法总结
作者:bladestone 发布时间:2022-09-22 11:09:32
前言: 在命令行中输入可以输入各类参数,本文将针对这些参数做一个小结。
基于命令行输入参数
测试程序如下:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
System.out.println("System Property, abc:" + System.getenv("feature.flag") + "," + System.getProperty("feature"));
System.out.println("args:" + Arrays.toString(args));
}
}
基于命令行的输入:
java -Dfeature=module1 -Xms128M -Xmx256M org.spb.data.Main first second third
输出为:
System Property, abc:null,module1
args:[first, second, third]
从上述示例中可知 -Dfeature=module1,设置了系统属性信息,被正确地解析出来。系统属性的设置位于Java程序之前。
first second third作为Java程序的args参数,需要放在程序之后才可以正确被解析。
-Xms128 -Xmx256M: 为设置JVM的参数,这里设置了其对内存的大小。
如果是Spring Boot应用的话,则可以在命令行设置:
– server.port=9091
通过两个‘- - '作为命令行参数的前缀。
基于Run Configuration界面设置Java程序的入口参数:
设置环境变量:
程序运行的结果信息:
从运行结果中可知: 环境变量被正确设置读取,但是系统属性却未正确设置。
基于命令行输入系统属性
java -Dfeature=module1 org.spb.data.Main
-D 表示其为系统属性
JVM参数设置
java -Xms128M -Xmx256M org.spb.data.Main
JVM参数是设置JVM的设置,其遵守JVM设置的参数类型。
环境变量 vs 系统属性
当程序中需要使用与操作系统相关的变量(例如:文件分隔符、换行符)时,Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量大多于系统相关,getProperty方法返回的变量大多与java程序有关。
系统属性和环境变量都是名称与值之间的映射。两种机制都能用来将用户定义的信息传递给 Java进程。环境变量产生更多的全局效应,因为它们不仅对Java子进程可见,而且对于定义它们的进程的所有子进程都是可见的。在不同的操作系统上,它们的语义有细微的差别,比如,不区分大小写。因此环境变量更可能有意料不到的副作用。程序中尽可能使用系统属性。环境变量应该在需要全局效应的时候使用,或者在外部系统接口要求使用环境变量时使用(比如 PATH)
从上述示例可知,系统属性由于其与程序紧密相关,则可以基于命令行进行设置。但是,环境变量则无法通过程序进行设置,需要基于IDE和环境变量进行设置。
Java命令行的帮助信息:
图中标示出来的就是系统属性信息。
基于Maven命令运行Spring Boot应用
程序代码如下:
@Slf4j
@SpringBootApplication
public class AppRunnerApplication {
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(AppRunnerApplication.class, args);
//Thread.currentThread().join();
log.info("args:{}", Arrays.toString(args));
log.info("feature:" + System.getProperty("feature"));
log.info("feature.flag:" + System.getenv("feature.flag"));
}
}
mvn spring-boot:run -Dmaven.test.skip=true -Pdev -Dspring-boot.run.arguments=“first seond third” -Dspring-boot.run.jvmArguments="-Dfeature=module11"
-Dfeature=module11设置系统属性信息
arguments: 设置Java 程序main的入口参数
对于环境变量,则需要设置pom.xml文件中的plugin配置项:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<systemPropertyVariables>
<feature>moduleXXX</feature>
</systemPropertyVariables>
<environmentVariables>
<feature.flag>true</feature.flag>
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>
运行结果为:
2019-11-11 23:08:22.764 INFO 18717 --- [ restartedMain] o.s.d.apprunner.cmdline.AppLineRunner1 : App LineRunner1:first seond third
2019-11-11 23:08:22.765 INFO 18717 --- [ restartedMain] o.s.d.apprunner.cmdline.AppLineRunner2 : App LineRunner2:[first seond third]
2019-11-11 23:08:22.766 INFO 18717 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : args:[first seond third]
2019-11-11 23:08:22.766 INFO 18717 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : feature:module11
2019-11-11 23:08:22.766 INFO 18717 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : feature.flag:true
如果在命令行不进行jvmArguments的参数设置:
mvn spring-boot:run -Dmaven.test.skip=true -Pdev -Dspring-boot.run.arguments=“first seond third”
输出结果信息如下:
2019-11-11 23:11:55.399 INFO 18757 --- [ restartedMain] o.s.d.apprunner.cmdline.AppLineRunner2 : App LineRunner2:[first seond third]
2019-11-11 23:11:55.400 INFO 18757 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : args:[first seond third]
2019-11-11 23:11:55.400 INFO 18757 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : feature:moduleXXX
2019-11-11 23:11:55.400 INFO 18757 --- [ restartedMain] o.s.data.apprunner.AppRunnerApplication : feature.flag:true
来源:https://blade.blog.csdn.net/article/details/103019782


猜你喜欢
- 我们绝大部分人估计都还在用着jdk8,12其实是一个非LTS(long time support)版本,而11与8一样是LTS版,意味着下个
- 基本的SpringMVC的搭建在我的上一篇文章里已经写过了,这篇文章主要说明一下如何使用SpringMVC进行表单上的文件上传以及多个文件同
- 本文实例为大家分享了java实现顶一下踩一下功能的具体代码,供大家参考,具体内容如下效果图如下:主页面index.html:<!DOC
- 定义MD全称Message-Digest,即信息摘要,所以MD家族的算法也叫信息摘要算法MD家族有MD2、MD3、MD4、MD5,一代比一代
- 前言一般在写业务接口的过程中,很有可能需要实现可以动态组合各种查询条件的接口。如果我们根据一种查询条件组合一个方法的做法来写,那么将会有大量
- 本文实例为大家分享了Java实现图片拼接的具体代码,供大家参考,具体内容如下/** * 拼接图片(注:图片需长宽一致) * @param f
- 目录1)在程序集中添加资源2)在程序集中查找资源这一篇单独拿出来分析这个程序集资源,为的就是不想让大家把程序集资源和exe程序强关联,因为程
- 一般对于业务复杂的流程,会有一些处理逻辑不需要及时返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量时间来处理,就可以通过异步的方式来
- 对于开发游戏项目的同胞来说,Timer 这个东西肯定不会陌生,今天对以前自己经常使用的定时进行了一番小小的总结!没有写具体实现的原理,只是列
- 本文实例讲述了Android编程使用AlarmManager设置闹钟的方法。分享给大家供大家参考,具体如下:package com.Aina
- 百度了许多相关资料,对两种修改app图标的方式进行总结:第一种:(最简单的方法)将你准备好的 图标放入res目录下的drawable,在An
- 本文实例讲述了Android编程设计模式之中介者模式。分享给大家供大家参考,具体如下:一、介绍中介者模式(Mediator Pattern)
- 本文实例为大家分享了Java使用MulticastSocket实现群聊应用程序的具体代码,供大家参考,具体内容如下在这篇文章中,讨论了一个使
- java中字符串转整数及MyAtoi方法的实现 该题虽然和我们正常使
- 本文实例讲述了C#禁止textbox复制、粘贴、剪切及鼠标右键的方法。分享给大家供大家参考。具体如下:class MyTextBox : S
- Input源码解读——从"Show tabs"开始本文基于Android T版本
- 在spring 3.2 及以后版本中增加了对请求的异步处理,旨在提高请求的处理速度降低服务性能消耗。在我们的请求中做了耗时处理,当并发请求的
- Springboot对配置文件的敏感信息加密前言最近公司对软件的安全问题比较在意,要求对配置文件中的敏感信息如数据库密码等进行加密。但是Sp
- ShapeDrawable是一种很常见的Drawable,可以理解为通过颜色来构造的图形,它既可以是纯色的图形,也可以是具有渐变效果的图形,
- 本文实例讲述了spring AOP的Around增强实现方法。分享给大家供大家参考,具体如下:一 配置<?xml version=&q