服务器之家

服务器之家 > 正文

如何使用Spring Boot ApplicationRunner解析命令行中的参数

时间:2021-06-18 14:11     来源/作者:jdon

使用spring提供的commandlinerunner接口可以实现了一个命令行应用程序。但是,参数/选项/参数处理却不是那么好。幸运的是,有一种更好的方法可以使用spring boot编写命令行应用程序,并且还可以使用applicationrunner接口进行解析。

在我们开始快速说明之前。在这两种情况下,无论是commandlinerunner还是applicationrunner,都始终支持spring的属性处理。我们可以像往常一样使用@value注释注入值。

完整的工作源代码在这里

首先,我们创建一个简单的spring boot应用程序并实现applicationrunner接口。现在,spring可以获得我们的这个类并执行它。它类似于commandlinerunner。

我们还必须实现一个方法run,但是我们将applicationarguments 作为入参数而不是string列表。

applicationarguments区分选项参数和非选项参数。选项参数是我们可以通过spring boot属性处理使用的(如 app.name = myapp)。它们还可以通过传入逗号分隔列表或多次使用参数来为每个选项包含多个值。

非选项参数是我们在命令行传递除了vm参数的所有其他参数。

在示例中,我们将打印出我们收到的每种类型的参数,然后显示它们。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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,它会返回一个列表字符串。

当我们现在启动应用程序并传递一些参数,如:

?
1
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

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021德云社封箱演出完整版 2021年德云社封箱演出在线看
2021德云社封箱演出完整版 2021年德云社封箱演出在线看 2021-03-15
返回顶部