前言: 在命令行中输入可以输入各类参数,本文将针对这些参数做一个小结。

基于命令行输入参数

测试程序如下:

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

参考文档

  1. 系统属性/环境变量
  2. Spring Boot Maven Plugin Usage

Java程序命令行参数总结相关推荐

  1. java main命令行参数_java使用命令行参数

    有时你想在运行程序时将信息传递到一个程序中.这通过将命令行参数(command-line arguments )传递给main() 来实现.命令行参数是程序执行时在命令行中紧跟在程序名后的信息.在Ja ...

  2. 介绍Java -D 命令行参数

    介绍Java -D 命令行参数 我们在ide中执行程序经常需要设置VM参数,运行maven命令也需要设置参数,都是通过-D设置参数值.本文带你了解-D命令行参数. 1. 什么是Java -D命令行参数 ...

  3. java 接收命令行参数_java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  4. c 运行 java linux命令行参数,Linux下用命令行编译运行Java总结

    最近使用腾讯云的Cloud Studio写Java,只能使用命令行进行编译运行,趁此机会,学习一下Linux的一些常用命令.平时windows下IDE用习惯了,现在用命令行进行编译运行,发现其实问题还 ...

  5. 如何在Java中解析命令行参数?

    在Java中解析命令行参数的好方法是什么? #1楼 我不建议使用Apache Common CLI库,因为它是非线程安全的. 它使用带有静态变量和方法的有状态类来进行内部工作(例如OptionBuil ...

  6. java命令行参数工具_Java方法中的参数太多,第8部分:工具

    java命令行参数工具 在我的系列文章的前七篇文章中,有关处理Java方法中期望的参数过多的内容集中在减少方法或构造函数期望的参数数量的替代方法上. 在本系列的第八篇文章中,我将介绍一些工具,这些工具 ...

  7. java 命令行参数 _java命令行参数

    原标题:java命令行参数 命令行参数就是main方法里面的参数String[] args他就是一个数组,args只是数据类型的一个名称,就是一个数组的变量,名称无所谓,类型没变就行了.这个就是程序的 ...

  8. java命令行参数写哪里_Java的命令行参数

    与类C语言一样,main函数都可以传入参数,这被称为命令行参数. 有些情况下这个参数还是很有意义的,比如Android源码中就会体现. Java中的命令行参数是如下格式的: main(String[] ...

  9. java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

最新文章

  1. sybase性能优化经验浅谈
  2. 只会用单片机点灯,很丢人吗?
  3. VS2010调试快捷键
  4. 【H.264/AVC视频编解码技术详解】七、 熵编码算法(1):基础知识
  5. 苹果电脑删除下载的更新文件_解决电脑管家病毒库更新误删除T6文件方法
  6. UOS系统如何查看windows系统的共享文件
  7. 记录每天学习的新知识: Android 前台服务
  8. H2O学习笔记(一)—— H2O概述
  9. 通俗解释什么是指令集
  10. 铁流:浪潮思科合资,高通中国设厂背后有什么故事
  11. 高仿富途牛牛-组件化(二)-磁力吸附
  12. VNC实现Windows远程访问Ubuntu 16.04(转)
  13. NppFTP-Disconnected
  14. nginx配置点播服务
  15. c语言中girth的作用,C++初级问题,急救中!!!
  16. 1905. 统计子岛屿
  17. 苹果闪存性能测试软件,iPhone 12 Pro性能测试,再次秒杀所有!
  18. C基础学习之C 输入 输出
  19. 桌面 计算机屏蔽,Win10家庭版如何禁止别人修改电脑桌面壁纸?
  20. 微信公众号平台的现状及发展前景的分析(十八)

热门文章

  1. 异贝,通过移动互联网技术,为中小微实体企业联盟、线上链接、线上线下自定义营销方案推送。案例23
  2. 单例模式:静态局部变量方式
  3. 80+开源数据集资源汇总(包含目标检测、医学影像、关键点检测、工业检测等方向)
  4. 未定义标识符 “HINSTANCE“ 与 int WINAPI WinMain报错的解决方法
  5. section、article、aside区别及HTML5语义化标签
  6. 婴儿床(STM32)
  7. 内存分配算法java_被说烂了的Java垃圾回收算法,我带来了最“清新脱俗”的详细图解...
  8. mysql 虚拟字段_Mysql 5.7 的‘虚拟列’是做什么?
  9. 猎豹安全网购导航jquery网址导航代码
  10. 最详细的Catboost参数详解与实例应用