如何使用Spring Boot ApplicationRunner解析命令行中的参数
作者:banq 发布时间:2022-12-11 02:45:32
使用Spring提供的CommandLineRunner接口可以实现了一个命令行应用程序。但是,参数/选项/参数处理却不是那么好。幸运的是,有一种更好的方法可以使用Spring Boot编写命令行应用程序,并且还可以使用ApplicationRunner接口进行解析。
在我们开始快速说明之前。在这两种情况下,无论是CommandLineRunner还是ApplicationRunner,都始终支持Spring的属性处理。我们可以像往常一样使用@Value注释注入值。
完整的工作源代码在这里
首先,我们创建一个简单的Spring Boot应用程序并实现ApplicationRunner接口。现在,Spring可以获得我们的这个类并执行它。它类似于CommandLineRunner。
我们还必须实现一个方法run,但是我们将ApplicationArguments 作为入参数而不是String列表。
ApplicationArguments区分选项参数和非选项参数。选项参数是我们可以通过Spring Boot属性处理使用的(如 app.name = Myapp)。它们还可以通过传入逗号分隔列表或多次使用参数来为每个选项包含多个值。
非选项参数是我们在命令行传递除了VM参数的所有其他参数。
在示例中,我们将打印出我们收到的每种类型的参数,然后显示它们。
@SpringBootApplication
public 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解析命令行中的参数网站的支持!
来源:https://www.jdon.com/50888


猜你喜欢
- 本文实例为大家分享了java实现仿射密码加密解密的具体代码,供大家参考,具体内容如下加密:将明文转化为对应的数字,如 ‘a'->
- 涉及知识点在本示例中,从数据绑定,到数据展示,涉及知识点如下所示:DataGrid,要WPF提供的进行二维数据展示在列表控件,默认功能非常简
- 背景由于项目是采用java编写的,微信包括微信支付大都是php相关,于是微信支付官方文档对java的支持就不是很友好,在网上找了很多文章,基
- Java File类 mkdir 不能创建多层目录File f = new File("/home/jp/Upload"
- 前言最近在学习C# Socket相关的知识,学习之余,动手做了一个简单的局域网聊天器。有萌生做这个的想法,主要是由于之前家里两台电脑之间想要
- 1、Aware 系列接口Aware 系列接口是用来获取 Spring 内部对象的接口。Aware 自身是一个顶级接口,它有一系列子接口,在一
- 本文实例讲述了C#获取路径的几种方式。分享给大家供大家参考。具体如下:string str1 =Process.GetCurrentProc
- java实现学生通讯录,使用XML文件作为数据存储,实现学生编号,姓名,年龄,住址,专业,生日等信息的添加,删除,修改,查找,备份,恢复,专
- 学习过java基础,最近趁着大量课余时间想学习Android开发。百度很多资料Android studio,由Google开发的开发工具,那
- 之前我们在使用vue进行 h5 表单录入的过程中,遇到了Android软键盘弹出,覆盖 h5页面 输入框 问题,在此进行回顾并分享给大家:系
- foreach遍历LIST读到数据为null当我们在使用mybatis的时候,就避免不了批量更新,或者批量查询使用数组或者list,就避免不
- 本文实例为大家分享了java实现图片分割指定大小的具体代码,供大家参考,具体内容如下1.使用工具:ThumbnailsThumbnails
- 前言在项目开发中经常会用到配置文件,配置文件的存在解决了很大一份重复的工作。今天就分享四种在Springboot中获取配置文件的方式。注:前
- 若要在 C++ 中实现异常处理,你可以使用 try、throw 和 catch 表达式。首先,使用 try 块将可能引发异常的一个或多个语句
- 一、邮件协议MTA 和 MDA 这样的服务器软件通常是现成的,我们通常不会关心这些邮件服务器的内部是如何运行 的。更多的需求场景,是需要发送
- Java平台的垃圾收集机制显著提高了开发者的效率,但是一个实现糟糕的垃圾收集器可能过多地消耗应用程序的资源。在Java虚拟机性能优化系列的第
- 主要是应对这种需求:软件只允许启动一次。将这个问题转化一下,可以这样描述:对于一个软件,在启动一个进程之后,不允许启动其它进程,如果第二次打
- 报错信息如下:java: 无法访问org.springframework.boot.SpringApplication错误的类文件: /C:
- 实际上,按一定速度读取摄像头视频图像后,便可以对图像进行各种处理了。那么获取主要用到的是VideoCapture类,一个demo如下://如
- 开发环境为android4.1.Handler使用例1这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.