从 spring-boot:run 获取命令行参数

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


答案 1

查看spring-boot-maven-plugin的源代码,我发现你需要这样做:

mvn spring-boot:run -Drun.arguments="arg1,arg2"

获取有关插件目标支持的选项的更多信息的另一种方法是执行以下命令:runspring-boot

mvn help:describe -Dcmd=spring-boot:run -Ddetail

对于Spring Boot 2.x,源代码在这里,您现在需要使用-Dspring-boot.run.arguments="args1,args2"

(2021年4月编辑)对于Spring Boot 2.2 +,您现在需要使用-Dspring-boot.run.arguments="args1 args2"

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

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

并使用运行任务gradle bootRun -Pargs="arg1 arg2"


答案 2

使用 -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”配置文件。