有一個SpringBoot專案需要在啟動後請求另一個遠端服務拿取設定,而不是載入過程中去請求,可能會出現類沒有範例化的場景,因此需要實現專案完全啟動後再進行請求的場景。
一般會有兩種實現方式:
@Component public class ConsumerRunner implements ApplicationRunner{ @Override public void run(ApplicationArgumers args) throws Exception{ //邏輯 System.out.println("SpringBoot專案啟動後執行"); } }
若有多個程式碼段需要執行,可用@Order註解設定執行的順序,值越小越先執行新增如@Order(value=1)
@Component public class CommandLineRunnerBean implements CommandLineRunner { @Override public void run(String... args) { String strArgs = Arrays.stream(args).collect(Collectors.joining("|"));
System.out.println("SpringBoot專案啟動後執行arguments:" + strArgs);
}
}
不同之處在於CommandLineRunner介面的run()方法接收String陣列作為引數,即是最原始的引數,沒有做任何處理;而ApplicationRunner介面的run()方法接收ApplicationArguments物件作為引數,是對原始引數做了進一步的封裝。