时间:2021-05-19
使用Spring提供的CommandLineRunner接口可以实现了一个命令行应用程序。但是,参数/选项/参数处理却不是那么好。幸运的是,有一种更好的方法可以使用Spring Boot编写命令行应用程序,并且还可以使用ApplicationRunner接口进行解析。
在我们开始快速说明之前。在这两种情况下,无论是CommandLineRunner还是ApplicationRunner,都始终支持Spring的属性处理。我们可以像往常一样使用@Value注释注入值。
完整的工作源代码在这里
首先,我们创建一个简单的Spring Boot应用程序并实现ApplicationRunner接口。现在,Spring可以获得我们的这个类并执行它。它类似于CommandLineRunner。
我们还必须实现一个方法run,但是我们将ApplicationArguments 作为入参数而不是String列表。
ApplicationArguments区分选项参数和非选项参数。选项参数是我们可以通过Spring Boot属性处理使用的(如 app.name = Myapp)。它们还可以通过传入逗号分隔列表或多次使用参数来为每个选项包含多个值。
非选项参数是我们在命令行传递除了VM参数的所有其他参数。
在示例中,我们将打印出我们收到的每种类型的参数,然后显示它们。
@SpringBootApplicationpublic class CommandlineAppApplication implements ApplicationRunner{ public static void main(String[] args) { SpringApplication.run(CommandlineAppApplication.class, args); } @Override public void run(ApplicationArguments args) throws Exception { System.out.println("# NonOptionArgs: " + args.getNonOptionArgs().size()); System.out.println("NonOptionArgs:"); args.getNonOptionArgs().forEach(System.out::println); System.out.println("# OptionArgs: " + args.getOptionNames().size()); System.out.println("OptionArgs:"); args.getOptionNames().forEach(optionName -> { System.out.println(optionName + "=" + args.getOptionValues(optionName)); }); }}非选项参数通过getNonOptionArgs()作为字符串列表重新获得。
而对于选项参数,我们可以通过接收选项名称getOptionNames和实际值通过getOptionValues,它会返回一个列表字符串。
当我们现在启动应用程序并传递一些参数,如:
java -jar commandline-app-0.0.1-SNAPSHOT.jar iamnonoption --app.name=CmdRulez --app.hosts=abc,def,ghi --app.name=2上述执行的输出:
#NonOptionArgs:1个
NonOptionArgs:
nonoption
#OptionArgs:2个
OptionArgs:
app.hosts = [ABC,DEF,GHI]
app.name = [CmdRulez,2]
总结
以上所述是小编给大家介绍的使用Spring Boot ApplicationRunner解析命令行中的参数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
前言在开发CLI(CommandLineInterface)工具的业务场景下,离不开命令行参数的收集和解析。接下来,本文介绍如何收集和解析命令行参数。收集命令行
在python中,命令行解析的很好用,首先导入命令行解析模块importargparseimportsys然后创建对象parse=argparse.Argume
CLI即CommandLineInterface,也就是"命令行接口",它为Java程序访问和解析命令行参数提供了一种统一的接口。apacheCommonsCL
最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具。以前老是做UI程序,今天试了下命令行程序,感觉
在命令行中运行python代码是很常见的,下面介绍如何定义命令后面跟的参数。1常规用法 Python代码中主要使用下面几行代码来定义并获取需要在命令行中赋