本篇文章给大家分享的是有关Spring Boot中怎么通过ApplicationArguments获取args参数,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
public ConfigurableApplicationContext run(String... args) {
// 下面的内容,封装String... args成 ApplicationArguments
}
// 将参数封装到ApplicationArguments对象中
ApplicationArguments applicationArguments = new DefaultApplicationArguments( args);
在具体使用Spring Boot的过程中,如果需要获得SpringApplication.run(args)方法传递的参数,那么可通过ApplicationArguments接口来获得。
如下代码:
@Component
public class ArgsBean {
@Resource
private ApplicationArguments arguments;
public void printArgs() {
System.out.println("# 非选项参数数量: " + arguments.getNonOptionArgs().size());
System.out.println("# 选项参数数量: " + arguments.getOptionNames().size());
System.out.println("# 非选项参具参数:");
arguments.getNonOptionArgs().forEach(System.out::println);
System.out.println("# 选项参数具体参数:");
arguments.getOptionNames().forEach(optionName -> {
System.out.println("--" + optionName + "=" + arguments.getOptionValues(optionName));
});
}
}
package com.imddysc.testc;
import java.util.Iterator;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import com.imddysc.testc.util.SpringContextUtils;
@SpringBootApplication
public class Application2 implements ApplicationRunner {
private static final Logger logger = LoggerFactory.getLogger(Application2.class);
@Autowired
private static SpringContextUtils springContextUtils;
public static void main(String[] args) throws Exception {
new SpringApplicationBuilder(Application2.class).web(WebApplicationType.NONE) // .REACTIVE, .SERVLET
.run(args);
logger.info("启动完成!");
}
@Override
public void run(ApplicationArguments args) throws Exception {
logger.info("spring boot not web!!! SpringBoot Application Runner ... ");
HdfsHttp hdfsHttp = new HdfsHttp();
hdfsHttp.getRandomIp();
/** 默认参数 */
String mkdir = ""; // --mkdir=upload/xxx/
String put = ""; // --uploadfile=a.txt
String get = ""; // --uploadNewFileName=aaa.txt
String localfile = "";
String descfile = "";
String mkdirpath = "";
/** 有帮助与否显示帮助 */
Set<String> argsSet = args.getOptionNames();
if (argsSet.isEmpty() || argsSet.contains("help")) {
printHelp();
System.exit(1);
}
/** 参数赋值 */
if (!argsSet.isEmpty()) {
for (Iterator iterator = argsSet.iterator(); iterator.hasNext();) {
String arg = (String) iterator.next();
if (arg.equalsIgnoreCase("localfile")) {
localfile = args.getOptionValues("localfile").get(0);
}
if (arg.equalsIgnoreCase("descfile")) {
descfile = args.getOptionValues("descfile").get(0);
}
if (arg.equalsIgnoreCase("mkdirpath")) {
mkdirpath = args.getOptionValues("mkdirpath").get(0);
}
}
}
/** 处理--mkdir */
if (argsSet.contains("mkdir")) {
logger.info("mkdirpath: " + mkdirpath);
if (mkdirpath.isEmpty() || mkdirpath.length() == 0) {
logger.info("mkdirpath参数为空!");
System.exit(1);
}
HdfsFile hdfsFile = new HdfsFile();
hdfsFile.mkdir(mkdirpath);
System.exit(1);
}
/** 处理--put */
if (argsSet.contains("put")) {
logger.info("localfile: " + localfile);
logger.info("descfile: " + descfile);
if (localfile.isEmpty() || localfile.length() == 0 || descfile.isEmpty() || descfile.length() == 0) {
logger.info("localfile参数为空,或者descfile参数为空!");
System.exit(1);
}
HdfsFile hdfsFile = new HdfsFile();
hdfsFile.putFile(localfile, descfile);
System.exit(1);
}
/** 处理--get */
if (argsSet.contains("get")) {
logger.info("descfile: " + descfile);
logger.info("localfile: " + localfile);
if (localfile.isEmpty() || localfile.length() == 0 || descfile.isEmpty() || descfile.length() == 0) {
logger.info("localfile参数为空,或者descfile参数为空!");
System.exit(1);
}
HdfsFile hdfsFile = new HdfsFile();
hdfsFile.getFile(descfile, localfile);
System.exit(1);
}
}
public static void printHelp() {
System.out.println("--mkdir --mkdirpath=要创建的路径");
System.out.println("--put --localfile=要上传的文件, --descfile=上传的目录(远端)");
System.out.println("--get --descfile=要下载的文件, --localfile下载的目录(本地)");
System.out.println("--get --descfile=cloud/a.txt --localfile=E:/codes/");
}
}
看一下CommandLineRunner和ApplicationRunner的源代码
public interface CommandLineRunner {
/**
* Callback used to run the bean.
* @param args incoming main method arguments
* @throws Exception on error
*/
void run(String... args) throws Exception;
}
public interface ApplicationRunner {
/**
* Callback used to run the bean.
* @param args incoming application arguments
* @throws Exception on error
*/
void run(ApplicationArguments args) throws Exception;
}
它们唯一不同便是run方法的参数 。
通过接口的官方文档,我们得知其实执行CommandLineRunner和ApplicationRunner的实现类是有顺序的,只不过在示例中并没有展示。针对上面的示例,我们可以通过@Order或实现Ordered接口来对其指定执行顺序。
获取对应的有选项的选项名称集合
Set<String> getOptionNames()
判断是否包含某个选项名称否
boolean containsOption(String name)
根据选项名称返回一个选项值列表
List<String> getOptionValues(String name)
返回非选项值列表
List<String> getNonOptionArgs()
返回源参数字符串数组
String[] getSourceArgs()
以上就是Spring Boot中怎么通过ApplicationArguments获取args参数,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/lenglingx/blog/5020603