【问题标题】:SpringBoot CLI properties with jCommander带有 jCommander 的 SpringBoot CLI 属性
【发布时间】:2017-07-13 17:01:06
【问题描述】:

我将 JCommander API 用于 Spring Boot - Spring Batch 项目。

项目有多个作业,我需要将作业名称作为参数传递,以便启动特定作业。

java -jar myJar.jar -jobName job1

现在,如果我的job1 正在运行,并且我想在那个时候启动job2,我不能这样做,因为端口已经在使用中。所以我只有在job1 完成后才能启动job2

如果我尝试在不同的端口启动job2

java -jar myJar.jar -jobName job2 --server.port=8090

然后 jCommander 不会让它通过,因为我没有在 JCommander 配置中定义 server.port,即使我这样做了,Spring Boot 也只会从属性文件中选择属性并尝试在同一端口运行 - 8080

如何处理这种情况?

【问题讨论】:

    标签: java spring-boot jcommander


    【解决方案1】:

    documentation for Spring Boot 说:

    您可以使用属性文件、YAML 文件、环境变量和 用于外部化配置的命令行参数。

    您应该能够像这样配置 server.port:

    java -jar myJar.jar -Dserver.port=8090 -jobName job2
    

    afaik 你也可以设置 SERVER_PORT 环境变量:

    SERVER_PORT=8090 java -jar myJar.jar -jobName job2
    

    【讨论】:

    • 知道了 - Caused by: com.beust.jcommander.ParameterException: Was passed main parameter '-Dserver.port=8090' but no main parameter was defined in your arg class ...这基本上意味着 jcommander 停止了它。设置环境变量对我来说不是一个选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2021-06-22
    • 2018-02-07
    • 2021-04-09
    • 2015-11-03
    相关资源
    最近更新 更多