如何使用Spring Boot ApplicationRunner解析命令行中的參數

這篇文章主要介紹了使用Spring Boot ApplicationRunner解析命令行中的參數,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑑價值,需要的朋友可以參考下

使用Spring提供的CommandLineRunner接口可以實現了一個命令行應用程序。但是,參數/選項/參數處理卻不是那麼好。幸運的是,有一種更好的方法可以使用Spring Boot編寫命令行應用程序,並且還可以使用ApplicationRunner接口進行解析。

在我們開始快速說明之前。在這兩種情況下,無論是CommandLineRunner還是ApplicationRunner,都始終支持Spring的屬性處理。我們可以像往常一樣使用@Value註釋注入值。

完整的工作源代碼在這裏

首先,我們創建一個簡單的Spring Boot應用程序並實現ApplicationRunner接口。現在,Spring可以獲得我們的這個類並執行它。它類似於CommandLineRunner。

我們還必須實現一個方法run,但是我們將ApplicationArguments 作爲入參數而不是String列表。

ApplicationArguments區分選項參數和非選項參數。選項參數是我們可以通過Spring Boot屬性處理使用的(如 app.name = Myapp)。它們還可以通過傳入逗號分隔列表或多次使用參數來爲每個選項包含多個值。

非選項參數是我們在命令行傳遞除了VM參數的所有其他參數。

在示例中,我們將打印出我們收到的每種類型的參數,然後顯示它們。

@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,它會返回一個列表字符串。

當我們現在啓動應用程序並傳遞一些參數,如:

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解析命令行中的參數,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對神馬文庫網站的支持!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章