SpringBoot使用CommandLineRunner和ApplicationRunner執(zhí)行初始化業(yè)務(wù)方式
業(yè)務(wù)場(chǎng)景
在業(yè)務(wù)場(chǎng)景中,有些情況下需要我們一啟動(dòng)項(xiàng)目就執(zhí)行一些操作.
例如數(shù)據(jù)配置的相關(guān)初始化,通用緩存的數(shù)據(jù)構(gòu)造等。
SpringBoot為我們提供了CommandLineRunner和ApplicationRunner兩個(gè)接口來(lái)實(shí)現(xiàn)這個(gè)功能。
接口說(shuō)明
CommandLineRunner和ApplicationRunner兩個(gè)接口除了參數(shù)不同,其他基本相同,可以根據(jù)實(shí)際需求選擇使用.
CommandLineRunner中的run方法參數(shù)為String..., ApplicationRunner中的run方法參數(shù)為ApplicationArguments.
在同等順序中,ApplicationRunner會(huì)比CommandLineRunner優(yōu)先執(zhí)行
使用方法
定義一個(gè)類實(shí)現(xiàn)該接口,重寫(xiě)其中的run方法即可. 如果有多個(gè)實(shí)現(xiàn)類,我們可以通過(guò)@Order注解來(lái)定義優(yōu)先級(jí)(數(shù)字越低越先執(zhí)行)
@Order(1)
@Component
public class MyCommandLineRunner1 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("========== 初始任務(wù)MyCommandLineRunner1 ==========");
}
}
@Order(2)
@Component
public class MyCommandLineRunner2 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("========== 初始任務(wù)MyCommandLineRunner2 ==========");
// throw new RuntimeException("模擬異常");
}
}
@Order(2)
@Component
public class MyApplicationRunner1 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("========== 初始任務(wù)MyApplicationRunner1 ==========");
}
}啟動(dòng)項(xiàng)目, 輸出如下:

注意事項(xiàng)
1. CommandLineRunner和ApplicationRunner的執(zhí)行其實(shí)是整個(gè)項(xiàng)目啟動(dòng)周期中的一部分,Runner執(zhí)行完成后,才最終啟動(dòng)項(xiàng)目.
2. 如果Runner中出現(xiàn)異常, 就會(huì)影響項(xiàng)目的啟動(dòng),所以要在Runner中處理異常
3. 如果Runner中需要指定定時(shí)周期任務(wù)(如一直循環(huán)打印某些信息等),需要在異步線程中執(zhí)行,否則項(xiàng)目的主線程會(huì)一直阻塞,無(wú)法啟動(dòng)成功
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java模擬實(shí)現(xiàn)銀行ATM機(jī)操作
這篇文章主要為大家詳細(xì)介紹了java模擬實(shí)現(xiàn)銀行ATM機(jī)操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
SpringCloud之LoadBalancer負(fù)載均衡服務(wù)調(diào)用過(guò)程
這篇文章主要介紹了SpringCloud之LoadBalancer負(fù)載均衡服務(wù)調(diào)用過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
詳談Array和ArrayList的區(qū)別與聯(lián)系
下面小編就為大家?guī)?lái)一篇詳談Array和ArrayList的區(qū)別與聯(lián)系。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
Java中的static和final關(guān)鍵字的使用詳解
這篇文章主要介紹了Java中的static和final關(guān)鍵字的使用詳解, 當(dāng)方法名前有static,即為static方法,可以方便我們無(wú)需創(chuàng)建對(duì)象也可以調(diào)用此方法,靜態(tài)方法比較拉,只可以訪問(wèn) 靜態(tài)的 屬性/變量/方法,無(wú)法訪問(wèn)非靜態(tài)的這些屬性/變量/方法,需要的朋友可以參考下2024-01-01
java將一個(gè)目錄下的所有數(shù)據(jù)復(fù)制到另一個(gè)目錄下
這篇文章主要為大家詳細(xì)介紹了java將一個(gè)目錄下的所有數(shù)據(jù)復(fù)制到另一個(gè)目錄下,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
IDEA工具maven不加載jar包問(wèn)題排查及解決
文章記錄了在IDEA中Maven不加載jar包的問(wèn)題排查過(guò)程,嘗試更換Maven、檢查配置等方法均未解決,最后僅通過(guò)命令行手動(dòng)執(zhí)行mvn命令暫時(shí)解決,但I(xiàn)DEA中依賴仍不加載2025-10-10
詳解SpringBoot2 使用Spring Session集群
這篇文章主要介紹了SpringBoot2 使用Spring Session集群,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-04-04

