如果想要在SpringApplication啟動后做一些事情,我們可以實現CommandLineRunner或者ApplicationRunner接口。這2個接口都提供了一個run方法,這個run方法會在SpringApplication.run(…)完成之前被調用。
另外,需要注意的是,我們可以同時使用多個實現了上述2個(任一)接口的bean,此時必須為這些bean指定順序:
- 讓你的bean在實現上述2個(任一)接口的同時實現org.springframework.core.Ordered接口
- 在你的bean上加上@Order注解
二者的功能和官方文檔一模一樣,都是在Spring容器初始化完畢之后執行起run方法。不同點在於,前者的run方法參數是String...args,直接傳入字符串;后者的參數是ApplicationArguments,對參數進行了封裝。
ApplicationArguments區分選項參數和非選項參數。選項參數是我們可以通過Spring Boot屬性處理使用的(如 app.name = Myapp)。它們還可以通過傳入逗號分隔列表或多次使用參數來為每個選項包含多個值。非選項參數是我們在命令行傳遞除了VM參數的所有其他參數。
非選項參數通過getNonOptionArgs()作為字符串列表重新獲得。
而對於選項參數,我們可以通過接收選項名稱 getOptionNames 和實際值通過 getOptionValues,它會返回一個列表字符串。
containsOption(String name):判斷從參數中解析的 option 參數是否包含指定名稱的選項 getNonOptionArgs():獲取args中的所有 non option 參數 getOptionNames():獲取args中所有的 option參數的name getSourceArgs():獲取傳遞給應用程序的原始未處理參數 getOptionValues(String name):獲取args中指定name的option參數的值