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

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

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

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

如果您正在使用Gradle并希望能够将命令行parameter passing给Gradle bootRun任务,则首先需要configuration,例如:

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

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

当使用-Drun.arguments传递多个参数时,如果参数依次具有“逗号分隔”值,则仅使用每个参数的第一个值。 为了避免这个重复的参数多less次的值。

这是更多的解决方法。 除非分隔符不同,否则不确定是否有其他select – 比如“|”。

例如问题:

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

为上述命令只挑选“testing”configuration文件。

解决方法:

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

为上述命令挑选'dev'和'test'configuration文件。

如果你使用Eclipse …

 | 参数名称| 值|
 |  run.arguments |  “--name = Adam”|

这是我的工作( spring-boot v1.4.3.RELEASE ),。

 mvn spring-boot:run -Dspring.profiles.active=test,local -Dlogback-debug=true 

请注意:传递参数的方式取决于spring-boot主要版本。

TLDR

对于Spring Boot 1:

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

对于Spring Boot 2:

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

1) spring-boot-maven-plugin版本和你使用的Spring Boot版本必须alignment。

根据所使用的Spring Boot主要版本( 12 ),确实应该使用12版本的spring-boot-maven-plugin
如果你的pom.xmlinheritance自spring-boot-starter-parent

 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>ONE_OR_TWO_VERSION</version> </parent> 

在你的pom中,所使用的插件版本甚至不应该被指定,因为这个插件依赖项被inheritance:

 <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> ... </configuration> </plugin> </plugins> 

如果您的pom.xml没有从spring-boot-starter-parentinheritance,请不要忘记将spring-boot-maven-plugin的版本与您想要使用的spring boot版本alignment。

2)使用spring-boot-maven-plugin在命令行中传递参数:1.XX

有一个论点:

 mvn spring-boot:run -Drun.arguments="argOne" 

对于多个:

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

maven插件页面logging它:

  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. 

3)使用spring-boot-maven-plugin在命令行中传递参数:2.XX

有一个论点:

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

对于多个:

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

我没有find指出的2.XX版本的插件文档。
但是spring-boot-maven-plugin: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; } ... } 

4)提示:当你通过多个参数时,逗号之间的空格被考虑。

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

将被解释为["argOne", "argTwo"]

但是这个 :

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

将被解释为["argOne", " argTwo"]