SpringBoot 在項目啟動之後執行自定義方法的兩種方式小結

SpringBoot 項目啟動之後執行自定義方法的兩種方式

在測試配置中心的配置時,想在項目啟動成功之後打印配置項,然後需要執行自定義的類

一般項目中也會在這個地方進行初始化數據的一些操作

方式一 實現 CommandLineRunner 接口

自定義類並實現 CommandLineRunner 接口,實現run()方法,需要執行的語句就放在 run() 方法中

例:

@Component
@Order(1)  // 控制類執行的順序越小越靠前
public class StartInitializer implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("項目啟動,執行 CommandLineRunner 實現類的方法");
    }
}

方式二 實現 ApplicationRunner 接口

自定義類並實現 ApplicationRunner 接口,實現run()方法,需要執行的語句就放在 run() 方法中

例:

@Component
@Order(2) // 控制類執行的順序越小越靠前
public class AppInitializer implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("項目啟動,執行 ApplicationRunner 實現類的方法");
    }
}

二者區別

區別在於實現方法 run() 中的參數類型不一樣

實現 ApplicationRunner 接口的 run() 方法參數類型為: ApplicationArguments

實現 CommandLineRunner 接口的 run() 方法參數類型為: String…

實現效果

Springboot 項目啟動後執行某些自定義代碼

Springboot給我們提供瞭兩種“開機啟動”某些方法的方式:ApplicationRunner和CommandLineRunner。

這兩種方法提供的目的是為瞭滿足,在項目啟動的時候立刻執行某些方法。我們可以通過實現ApplicationRunner和CommandLineRunner,來實現,他們都是在SpringApplication 執行之後開始執行的。

CommandLineRunner接口可以用來接收字符串數組的命令行參數,ApplicationRunner 是使用ApplicationArguments 用來接收參數的

代碼示例

@Component//被spring容器管理
@Order(1)//如果多個自定義ApplicationRunner,用來標明執行順序
public class MyApplicationRunner implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        System.out.println("-------------->" + "項目啟動,now=" + new Date());
        myTimer();
    }
    public static void myTimer(){
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("------定時任務--------");
            }
        }, 0, 1000);
    }
}

執行結果

2018-02-08 14:10:16.490  INFO 10236 — [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8081 (http)
————–>項目啟動,now=Thu Feb 08 14:10:16 CST 2018
——定時任務——–
2018-02-08 14:10:16.497  INFO 10236 — [           main] com.mlxs.springboot01.web.MainApp        : Started MainApp in 5.595 seconds (JVM running for 6.334)
——定時任務——–
——定時任務——–
——定時任務——–
——定時任務——–
——定時任務——–
——定時任務——–

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: