使用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));
}
}
在我们的项目中,我们使用 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));
}
}