Java 从spring引导获取命令行参数:run

Java 从spring引导获取命令行参数:run,java,maven,spring-boot,command-line-arguments,Java,Maven,Spring Boot,Command Line Arguments,在从命令行启动spring boot应用程序(mvn spring boot:run)时,有没有办法输入参数,然后将它们放入main()中?查看spring boot maven插件的详细信息,我发现您需要执行以下操作: mvn spring-boot:run -Drun.arguments="arg1,arg2" 获取有关spring boot插件的run目标支持哪些选项的更多信息的另一种方法是执行以下命令: mvn help:describe -Dcmd=spring-

在从命令行启动spring boot应用程序(mvn spring boot:run)时,有没有办法输入参数,然后将它们放入main()中?

查看spring boot maven插件的详细信息,我发现您需要执行以下操作:

mvn spring-boot:run -Drun.arguments="arg1,arg2"
获取有关
spring boot
插件的
run
目标支持哪些选项的更多信息的另一种方法是执行以下命令:

mvn help:describe -Dcmd=spring-boot:run -Ddetail
对于Spring Boot 2.x,源代码是,您现在需要使用
-dsspring Boot.run.arguments=“args1,args2”

(从2021年4月开始编辑) 对于Spring Boot 2.2+,您现在需要使用
-dsspring Boot.run.arguments=“args1 args2”

如果您正在使用Gradle,并且希望能够将命令行参数传递给Gradle
bootRun
任务,则首先需要配置,例如:

bootRun {
    if ( project.hasProperty('args') ) {
        args project.args.split('\\s+')
    }
}

并使用gradle bootRun-Pargs=“arg1 arg2”

运行任务,如果您使用的是Eclipse

| Parameter Name | Value | | run.arguments | "--name=Adam" | |参数名称|值| |run.arguments |“--name=Adam”|
使用-Drun.arguments传递多个参数时,如果参数依次具有“逗号分隔”值,则仅使用每个参数的第一个值。为了避免这种情况,重复参数的次数与值的数量相同

这更像是一种变通方法。不确定是否有替代项,除非分隔符不同,如“|”

例如问题:

mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,dev"
仅为上述命令拾取“测试”配置文件

解决方法:

mvn spring-boot:run -Drun.arguments="--spring.profiles.active=test,--spring.profiles.active=dev"

为上面的命令选择“dev”和“test”配置文件。

这对我来说是有效的(
spring boot v1.4.3.RELEASE


请注意:传递参数的方式取决于
spring boot
major.minor版本。

TLDR

对于弹簧护套1:

mvn spring-boot:run -Drun.arguments="argOne,argTwo"
对于弹簧护套2.0和2.1:

mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
(从2021年4月开始编辑) 对于Spring boot 2.2及更高版本:

mvn spring-boot:run -Dspring-boot.run.arguments="argOne argTwo"

  • springbootmaven插件
    版本和您使用的
    springboot
    版本必须对齐
  • 根据使用的Spring Boot主要版本(
    1
    2
    ),确实应该使用
    1
    2
    版本中的
    Spring Boot maven插件。
    如果您的
    pom.xml
    继承自
    spring boot starter父级

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>ONE_OR_TWO_VERSION</version>
    </parent>
    
    对于多个:

    mvn spring-boot:run -Drun.arguments="argOne,argTwo"
    
    mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
    
    文件包括:

      Name         Type       Since           Description
    arguments  |  String[]  |  1.0  | Arguments that should be passed 
                                      to the application. On command line use 
                                      commas to separate multiple arguments.
                                      User property is: run.arguments.
    
  • 使用spring boot maven插件2.X.X在命令行中传递参数
  • 有一个论点:

    mvn spring-boot:run -Drun.arguments="argOne"
    
    mvn spring-boot:run -Dspring-boot.run.arguments="argOne"
    
    对于多个:

    mvn spring-boot:run -Drun.arguments="argOne,argTwo"
    
    mvn spring-boot:run -Dspring-boot.run.arguments="argOne,argTwo"
    
    我没有找到与此相关的2.X.X版本的插件文档。
    但是
    SpringBootMaven插件:2.0.0.M3
    org.springframework.boot.maven.AbstractRunMojo
    类引用了以下用户属性:

    public abstract class AbstractRunMojo extends AbstractDependencyFilterMojo
       ...
       @Parameter(property="spring-boot.run.arguments")
       private String[] arguments;
       ...
       protected RunArguments resolveApplicationArguments(){
         RunArguments runArguments = new RunArguments(this.arguments);
         addActiveProfileArgument(runArguments);
         return runArguments;
       }
       ...
     }
    
  • 提示:当您传递多个参数时,将考虑逗号之间的空格

    mvn spring引导:run-Dspring boot.run.arguments=“argOne,argTwo”

  • 将被解释为
    [“argOne”、“argTwo”]

    但这是:

    mvn spring-boot:run -Dspring-boot.run.arguments="argOne, argTwo"
    
    将被解释为
    [“argOne”、“argTwo”]

    (从2021年3月开始编辑)


    空格现在用作多个参数的分隔符命令,请参阅相关的。

    Spring Boot 1 as 2提供了一种将多个配置文件作为参数传递的方法,并避免了将逗号用作参数和作为活动配置文件传递的值之间的分隔符的问题

    因此,与其写:

    mvn spring-boot:run -Dspring-boot.run.arguments=--spring.profiles.active=test,--spring.profiles.active=dev
    
    使用这是spring.profiles.active的方便快捷方式,例如:

    Maven用户属性根据Spring启动版本的不同而不同

    对于Spring Boot 1.4+,即
    run.profiles

    mvn spring-boot:run -Drun.profiles=dev,test
    
    mvn spring-boot:run -Dspring-boot.run.profiles=dev,test
    
    对于Spring Boot 2,即
    Spring Boot.run.profiles

    mvn spring-boot:run -Drun.profiles=dev,test
    
    mvn spring-boot:run -Dspring-boot.run.profiles=dev,test
    
    从插件文档中:

    配置文件

    要激活的弹簧轮廓。指定的快捷方式 “spring.profiles.active”参数。在命令行中,使用逗号 分离多个配置文件

    类型:java.lang.String[]

    自:1.3

    必填项:否

    用户属性:spring boot.run.profiles


    对于最新版本的spring,请使用-dsspring boot.run.arguments=,如下例所示

    spring-boot:run -Djasypt.encryptor.password=temp -Dspring-boot.run.arguments="OU,Grade"
    

    正如我今天检查的,Spring Boot 2.2.5的正确用法是:

    mvn spring-boot:run -Dspring-boot.run.arguments="--arg1=value --arg2=value"
    
    因为帮助说:


    我使用的是spring.boot 2.4.2,我用空格分隔了参数,并将值放在双引号之间

    mvn spring-boot:run -Dspring-boot.run.arguments="--param1=value2 --param2=value2"
    

    谢谢+1谢谢你的回答。@sukrit007很高兴它帮助了你!他们在标准空格上接受逗号是很愚蠢的。RTFM Spring:对于gradle 3.3,以下修改对我有效:
    bootRun{//用法:gradle bootRun-Pargs=“arg1 arg2”if(project.hasProperty('args')){args=(project.args.split(\\s+”)as List)}
    从Spring boot2开始,您应该使用
    -Dspring boot.run.arguments=
    如何在插件的pom.xml
    配置
    部分中指定参数?我尝试了
    -Dprop=value
    ,但它没有以这种方式获取属性值。@user1902183使用
    -prop=value
    从Spring Boot 2开始,您应该使用
    -dsspring Boot.run.arguments=
    响应良好,谢谢@user3157855。