您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)Spring Boot中怎么通過ApplicationArguments獲取args參數(shù),小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
public ConfigurableApplicationContext run(String... args) { // 下面的內(nèi)容,封裝String... args成 ApplicationArguments }
// 將參數(shù)封裝到ApplicationArguments對象中 ApplicationArguments applicationArguments = new DefaultApplicationArguments( args);
在具體使用Spring Boot的過程中,如果需要獲得SpringApplication.run(args)方法傳遞的參數(shù),那么可通過ApplicationArguments接口來獲得。
如下代碼:
@Component public class ArgsBean { @Resource private ApplicationArguments arguments; public void printArgs() { System.out.println("# 非選項(xiàng)參數(shù)數(shù)量: " + arguments.getNonOptionArgs().size()); System.out.println("# 選項(xiàng)參數(shù)數(shù)量: " + arguments.getOptionNames().size()); System.out.println("# 非選項(xiàng)參具參數(shù):"); arguments.getNonOptionArgs().forEach(System.out::println); System.out.println("# 選項(xiàng)參數(shù)具體參數(shù):"); 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(); /** 默認(rèn)參數(shù) */ 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); } /** 參數(shù)賦值 */ 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參數(shù)為空!"); 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參數(shù)為空,或者descfile參數(shù)為空!"); 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參數(shù)為空,或者descfile參數(shù)為空!"); System.exit(1); } HdfsFile hdfsFile = new HdfsFile(); hdfsFile.getFile(descfile, localfile); System.exit(1); } } public static void printHelp() { System.out.println("--mkdir --mkdirpath=要創(chuàng)建的路徑"); System.out.println("--put --localfile=要上傳的文件, --descfile=上傳的目錄(遠(yuǎn)端)"); 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方法的參數(shù) 。
通過接口的官方文檔,我們得知其實(shí)執(zhí)行CommandLineRunner和ApplicationRunner的實(shí)現(xiàn)類是有順序的,只不過在示例中并沒有展示。針對上面的示例,我們可以通過@Order或?qū)崿F(xiàn)Ordered接口來對其指定執(zhí)行順序。
獲取對應(yīng)的有選項(xiàng)的選項(xiàng)名稱集合
Set<String> getOptionNames()
判斷是否包含某個選項(xiàng)名稱否
boolean containsOption(String name)
根據(jù)選項(xiàng)名稱返回一個選項(xiàng)值列表
List<String> getOptionValues(String name)
返回非選項(xiàng)值列表
List<String> getNonOptionArgs()
返回源參數(shù)字符串?dāng)?shù)組
String[] getSourceArgs()
以上就是Spring Boot中怎么通過ApplicationArguments獲取args參數(shù),小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。