从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主要版本( 1
或2
),确实应该使用1
或2
版本的spring-boot-maven-plugin
。
如果你的pom.xml
inheritance自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-parent
inheritance,请不要忘记将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"]