让我们学习如何读取Spring Boot应用程序的命令行参数。
与任何其他java程序一样,Spring Boot可以在启动时获取应用程序参数的程序参数。但springboot在参数解析方面做了额外的工作。让我们进入细节。
这两个接口本质上相似,有助于访问命令行参数。
Spring Boot中的CommandLineRunner
接口允许您访问所有原始命令行参数。如果您愿意阅读,我们有一篇关于springboot中命令行运行程序的详细文章。基本上,您可以编写类型为CommandLineRunner
的Bean或Component来访问参数。例如,让我们按照此处所示编写跑步者。
@Component
public class StartupPrintRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("args = " + Arrays.deepToString(args));
}
}
Code language: Java (java)
如果我们用很少的参数运行应用程序,您可以看到应用程序正在打印它们。
java -jar spring-boot-example.jar first-argument second-argument third-argument
Code language: Bash (bash)
进一步,让我们看看CommandLineRunner
的一些缺点。
1.参数只能作为字符串列表获取。
1.没有参数分析。例如,如果您发送--some-option=some-value
,则它们将作为单个参数(["--some-option=some-value"]
)。
1.不能将这些参数直接注入其他组件。
默认情况下,Spring boot提供类型为ApplicationArguments的bean。此bean包含所有已解析和未解析的命令行参数。重要的是,你可以在你想要的任何地方自动连线。
@Component
public class SomeComponent {
private final ApplicationArguments applicationArguments;
public SomeComponent(ApplicationArguments applicationArguments) {
this.applicationArguments = applicationArguments;
}
//do something with applicationArguments in methods
}
Code language: Java (java)
但是,如果您希望获得与CommandLineRunner类似的行为,则应使用ApplicationRunner接口。下面是方法。
@Component
public class StartupApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("args.getOptionNames() = " + args.getOptionNames());
System.out.println("args.containsOption(\"first-argument\") = " + args.containsOption("first-argument"));
System.out.println("args.getOptionValues(\"first-argument\") = " + args.getOptionValues("first-argument"));
System.out.println("args.getNonOptionArgs() = " + args.getNonOptionArgs());
args.getNonOptionArgs();
}
}
Code language: Java (java)
请注意,我们使用了ApplicationArguments接口中的各种方法。
1.args.getOptionNames()
–返回已解析参数键的列表。
1.args.containsOption()
–根据给定选项的存在检查并返回布尔值。
1.args.getOptionValues()
–将所有匹配值作为给定选项的数组返回(是的,可以多次添加选项)
1.args.getNonOptionArgs()
–返回所有未遵循–option=value格式的孤立参数。
如果您感兴趣,那么可以使用以下命令运行应用程序并自己查看结果。
mvn clean install
java - jar spring-boot-command-line-args-0.0.1-SNAPSHOT.jar --first-argument=first-value --second-argument=second-value third-argument
Code language: Bash (bash)
Spring Boot还在Spring上下文中注册CommandLinePropertySource
。这个属性源允许我们将解析的参数直接注入组件。
@Component
public class SomeComponent {
@Value("${second-argument}")
private String secondArgument;
//more autowiring
}
Code language: Java (java)
这种方法等同于如何应用。属性的行为。这意味着您可以使用命令行参数覆盖应用程序属性。
总之,我们学习了在springboot中访问应用程序参数的各种方法。您可以在我们的GitHub repository中找到所有这些示例。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://springhow.com/spring-boot-application-arguments/
内容来源于网络,如有侵权,请联系作者删除!