亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot中怎么通過ApplicationArguments獲取args參數

發布時間:2021-06-22 17:05:29 來源:億速云 閱讀:1230 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關Spring Boot中怎么通過ApplicationArguments獲取args參數,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

1,直接使用new DefaultApplicationArguments( args)進行轉換。

public ConfigurableApplicationContext run(String... args) {
    // 下面的內容,封裝String... args成 ApplicationArguments
}
// 將參數封裝到ApplicationArguments對象中
ApplicationArguments applicationArguments = new DefaultApplicationArguments( args);

在具體使用Spring Boot的過程中,如果需要獲得SpringApplication.run(args)方法傳遞的參數,那么可通過ApplicationArguments接口來獲得。

2,使用方法非常簡單,只用在需要獲得參數的類中直接注入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));
		});
	}

}

3,還有一種是springboot的Application實現了ApplicationRunner這個接口。

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/");
	}

}

4,提到了ApplicationRunner 再提提CommandLineRunner。

看一下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接口來對其指定執行順序。

第二部分:常見API介紹

獲取對應的有選項的選項名稱集合
Set<String> getOptionNames()

判斷是否包含某個選項名稱否
boolean containsOption(String name)

根據選項名稱返回一個選項值列表
List<String> getOptionValues(String name)

返回非選項值列表
List<String> getNonOptionArgs()

返回源參數字符串數組
String[] getSourceArgs()

以上就是Spring Boot中怎么通過ApplicationArguments獲取args參數,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄迈县| 自贡市| 娄底市| 塔河县| 中牟县| 贵溪市| 额尔古纳市| 房山区| 融水| 龙州县| 南靖县| 寿阳县| 当雄县| 全椒县| 泾源县| 霞浦县| 会东县| 汾阳市| 石门县| 荔波县| 西青区| 繁昌县| 星子县| 滨州市| 广水市| 天全县| 射洪县| 澄城县| 陇川县| 盐池县| 绵阳市| 龙口市| 盘山县| 永仁县| 梁平县| 福建省| 凌源市| 清远市| 张家川| 聂拉木县| 定陶县|