Java程序命令行参数用法总结

 更新时间:2021年09月23日 08:48:42   作者:bladestone  
这篇文章主要介绍了Java程序命令行参数用法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

基于命令行输入参数

测试程序如下:

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Date jpa 获取最新一条数据的实例代码

    Spring Date jpa 获取最新一条数据的实例代码

    这篇文章主要介绍了Spring Date jpa 获取最新一条数据的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • MyBatis延迟加载实现步骤详解

    MyBatis延迟加载实现步骤详解

    这篇文章主要介绍了MyBatis延迟加载实现步骤详解,​ MyBatis中的延迟加载,也成为懒加载,是指在进行关联查询时,按照设置的延迟规则推迟对关联对象的查询,延迟加载可以有效的减少数据库的压力,需要的朋友可以参考下
    2023-10-10
  • SpringCloud Bus消息总线的实现

    SpringCloud Bus消息总线的实现

    消息总线是一种通信工具,可以在机器之间互相传输消息、文件等,这篇文章主要介绍了SpringCloud Bus消息总线的实现,Spring cloud bus 通过轻量消息代理连接各个分布的节点,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Spring实战之Qualifier注解用法示例

    Spring实战之Qualifier注解用法示例

    这篇文章主要介绍了Spring实战之Qualifier注解用法,结合实例形式详细分析了spring Qualifier注解相关配置、定义与使用方法,需要的朋友可以参考下
    2019-12-12
  • Java获取电脑真实IP地址的示例代码

    Java获取电脑真实IP地址的示例代码

    这篇文章主要介绍了Java如何获取电脑真实IP地址,忽略虚拟机等IP地址的干扰,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-09-09
  • Idea启动多个SpringBoot项目的3种最新方案

    Idea启动多个SpringBoot项目的3种最新方案

    SpringBoot自带Tomcat,直接运行main方法里面的SpringApplication.run即可,并且访问时不需要带项目名,这篇文章主要介绍了Idea启动多个SpringBoot项目的3种方案,需要的朋友可以参考下
    2023-02-02
  • 仅用5分钟极速入门Dubbo使用教程

    仅用5分钟极速入门Dubbo使用教程

    今天给大家介绍一款高性能、透明的远程过程调用框架dubbo,通过本文学习可以快速掌握Dubbo知识,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • Java如何获取Date的“昨天”与“明天”示例代码

    Java如何获取Date的“昨天”与“明天”示例代码

    最近在做项目的时候用到Date和Calendar比较多,而且用到的方式也比较全,突然想到一个问题,Java如何获取Date的"昨天"与"明天",也就是前一天和后一天呢?思考后写出了方法,想着万一以后用到,就总结出来,也方便有需要的朋友们参考借鉴,下面来一起看看吧。
    2016-12-12
  • Java遍历Json中的key和value问题

    Java遍历Json中的key和value问题

    这篇文章主要介绍了Java遍历Json中的key和value问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 基于javassist进行动态编程过程解析

    基于javassist进行动态编程过程解析

    这篇文章主要介绍了基于javassist进行动态编程过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论