SpringBoot專案啟動後再請求遠端介面的實現方式

2023-02-13 09:00:11

場景

  有一個SpringBoot專案需要在啟動後請求另一個遠端服務拿取設定,而不是載入過程中去請求,可能會出現類沒有範例化的場景,因此需要實現專案完全啟動後再進行請求的場景。

解決

一般會有兩種實現方式:

實現ApplicationRunner介面

@Component
public class ConsumerRunner implements ApplicationRunner{
    @Override
    public void run(ApplicationArgumers args) throws Exception{
        //邏輯
        System.out.println("SpringBoot專案啟動後執行");
    }
}

  若有多個程式碼段需要執行,可用@Order註解設定執行的順序,值越小越先執行新增如@Order(value=1)

實現CommandLineRunner介面

@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物件作為引數,是對原始引數做了進一步的封裝。