在命令行 Spring Boot 中传递多个参数

Posted

技术标签:

【中文标题】在命令行 Spring Boot 中传递多个参数【英文标题】:Passing multiple arguments in command line Spring Boot 【发布时间】:2020-08-06 20:28:22 【问题描述】:

我需要将多个参数传递给 maven 命令行来运行 Spring Boot 应用程序。这就是我在 Spring Boot 中传递命令行参数的方式。我使用的是spring boot 2.2.6 Release

mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8999,--spring.application.instance_id=dhn"

但是我得到以下错误

nested exception is org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'server.port' to java.lang.Integer

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to bind properties under 'server.port' to java.lang.Integer:

    Property: server.port
    Value: 8999,--spring.application.instance_id=dhn
    Origin: "server.port" from property source "commandLineArgs"
    Reason: failed to convert java.lang.String to java.lang.Integer

Action:

Update your application's configuration

好像参数解析不正确

【问题讨论】:

【参考方案1】:

, 分隔符似乎不起作用。虽然我已经在教程中看到过这种风格。

有效的是将空格作为分隔符:

mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8999 --spring.application.instance_id=dhn"

【讨论】:

空格分隔符不适用于 Spring-boot 2.1.5【参考方案2】:

对于 Maven Command-Line Arguments,您可以使用 -Dspring-boot.run.arguments 传递参数,而无需将其括在双引号中,例如:

mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8999,--spring.application.instance_id=dhn

为了传递Gradle Command-Line Arguments,首先将build.gradle文件中的bootRun任务配置为:

bootRun 
    if (project.hasProperty('args')) 
        args project.args.split(',')
    

现在将命令行参数传递为:

./gradlew bootRun -pargs=--server.port=8999,--spring.application.instance_id=dhn

请参阅此快速教程 - Command-Line Arguments in Spring Boot 以获得广泛的理解。

【讨论】:

以上是关于在命令行 Spring Boot 中传递多个参数的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot JPA:为同一参数传递多个值 (JPQL)

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

将命令行参数传递给在 Docker 中运行的 Java 应用程序(Spring Boot)

Spring boot 梳理 - 在bean中使用命令行参数-自动装配ApplicationArguments

If 语句取决于传递的命令行参数是啥? [复制]

如何在使用命令行 Gradle (6.4) 构建 Spring Boot 应用程序时传递 spring.config.location="some path"