使用picocli时如何通过命令行参数配置lightbend/typesafeConfig

How to configure lightbend/typesafeConfig via command line parameter when using picocli

在我们的项目中,我们使用 Lightbend Config / TypesafeConfig。

我可以 运行 我的程序 java -jar。我的程序的配置也可以使用命令行参数来完成。

示例:

java -jar simpleclient.jar -Dservice.url="http://localhost:8123"

现在我引入了 https://picocli.info/ 以便为我的应用程序提供更好的命令行处理。

我现在面临的问题是,picocli 不允许在标准配置中使用 -D... 参数。

如何更改?

当您说“picocli 不允许使用 -D... 选项”时,我假设您的意思是您希望允许最终用户使用 -Dkey=value 语法设置系统属性。当此类参数传递给应用程序时,应用程序需要使用这些值来设置系统属性,如下所示。

首先,用户可以通过将 -Dkey=value 参数传递给 java 进程而不是传递给 jar 中的主 class 来设置系统属性。在下面的调用中,系统属性是直接设置的,不会作为参数传递给应用程序:

java -Dservice.url="http://localhost:8123"  -jar simpleclient.jar

其次,您可以在您的应用程序中定义一个 -D 选项来设置系统属性:

@Command
class SimpleClient {

    @Option(names = "-D")
    void setProperty(Map<String, String> props) {
        props.forEach((k, v) -> System.setProperty(k, v == null ? "" : v));
    }
}