亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot實現(xiàn)多個ApplicationRunner時部分接口未執(zhí)行問題

 更新時間:2023年05月16日 09:47:01   作者:驚虹上的小白  
這篇文章主要介紹了SpringBoot實現(xiàn)多個ApplicationRunner時部分接口未執(zhí)行問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot多個ApplicationRunner時部分接口未執(zhí)行

在springboot的項目中,需要在容器啟動之后執(zhí)行一些操作。springboot提供了ApplicationRunner和CommandLineRunner兩個接口可以幫助我們實現(xiàn)這種需求。

當(dāng)項目中實現(xiàn)了多個ApplicationRunner接口,并且其中一個使用了類似于while(true)這樣不會退出的循環(huán)體。將會導(dǎo)致后續(xù)的ApplicationRunner接口不會被調(diào)用。

如下:

@Component
@Slf4j
public class RunnerTest1 implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        while (true) {
            System.out.println("this is RunnerTest1");
            Thread.sleep(100);
        }
    }
}
@Component
@Slf4j
public class RunnerTest2 implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        while (true) {
            System.out.println("this is RunnerTest2");
            Thread.sleep(100);
        }
    }
}

輸出結(jié)果:

可以看到項目啟動后RunnerTest2 將不會被執(zhí)行。

通過分析springboot啟動的源碼可以發(fā)現(xiàn),在applicationContext容器加載完成之后,會調(diào)用SpringApplication類的callRunners方法

該方法中會獲取所有實現(xiàn)了ApplicationRunner和CommandLineRunner的接口bean,然后依次執(zhí)行對應(yīng)的run方法,并且是在同一個線程中執(zhí)行。

因此如果有某個實現(xiàn)了ApplicationRunner接口的bean的run方法一直循環(huán)不返回的話,后續(xù)的代碼將不會被執(zhí)行。

ApplicationRunner實現(xiàn)項目啟動就執(zhí)行的功能

ApplicationRunner

是一個接口,常用于項目啟動后,(也就是ApringApplication.run()執(zhí)行結(jié)束),立馬執(zhí)行某些邏輯。

可用于項目的準(zhǔn)備工作,比如加載配置文件,加載執(zhí)行流,定時任務(wù)等等。

如何使用ApplicationRunner

這里有幾點說明:

  • 1:這個實現(xiàn)類,要注入到spring容器中,這里使用了@Component注解;
  • 2:在同一個項目中,可以定義多個ApplicationRunner的實現(xiàn)類,他們的執(zhí)行順序通過注解@Order注解或者再實現(xiàn)Ordered接口來實現(xiàn)。
  • 3:run方法的參數(shù):ApplicationArguments可以獲取到當(dāng)前項目執(zhí)行的命令參數(shù)。(比如把這個項目打成jar執(zhí)行的時候,帶的參數(shù)可以通過ApplicationArguments獲取到);
  • 4:由于該方法是在容器啟動完成之后,才執(zhí)行的,所以,這里可以從spring容器中拿到其他已經(jīng)注入的bean。

(可以有多個實例實現(xiàn)該接口,但是一般需要增加注解@Order來指定加載順序)

@Component
@Order(2)
public class JDDRunner implements ApplicationRunner {
? ? @Override
? ? public void run(ApplicationArguments args) throws Exception {
? ? ? ? System.out.println(args);
? ? ? ? System.out.println("這個是測試ApplicationRunner接口");
? ? }
}

實現(xiàn)ApplicationRunner接口,重寫run方法,定義具體的執(zhí)行邏輯

@Order注解,用于決定多個bean的執(zhí)行順序,按照值從小到大執(zhí)行 (值可為負(fù)數(shù))

  • @Order(-1)優(yōu)先于@Order(0)
  • @Order(1)優(yōu)先于@Order(2)

還有個接口

也可以實現(xiàn)和ApplicationRunner一樣的功能

  • CommandLineRunner
  • CommandLineRunner接口的run方法接收的參數(shù)為String數(shù)組

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • hadoop分布式環(huán)境搭建過程

    hadoop分布式環(huán)境搭建過程

    這篇文章主要介紹了hadoop分布式環(huán)境搭建過程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Spring Boot 啟動流程解析

    Spring Boot 啟動流程解析

    Spring Boot 是一個簡化的 Spring 應(yīng)用開發(fā)框架,它以 “約定優(yōu)于配置” 的理念,為開發(fā)者提供了開箱即用的功能,本文將詳細(xì)剖析其內(nèi)部實現(xiàn),幫助你深入理解 Spring Boot 的啟動機制,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • JAVA使用反射讀取注解方式

    JAVA使用反射讀取注解方式

    在Java中,反射機制不僅可以操作對象的屬性和方法,還可以讀取注解,本文介紹了反射讀取注解的步驟,包括定義注解、使用注解、通過反射獲取注解信息及處理注解信息,通過具體代碼例子和運行結(jié)果,詳細(xì)解釋了注解的定義、使用和反射獲取注解的過程
    2024-09-09
  • Java基于分治算法實現(xiàn)的線性時間選擇操作示例

    Java基于分治算法實現(xiàn)的線性時間選擇操作示例

    這篇文章主要介紹了Java基于分治算法實現(xiàn)的線性時間選擇操作,涉及java排序、比較、計算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • 關(guān)于SpringBoot整合Canal數(shù)據(jù)同步的問題

    關(guān)于SpringBoot整合Canal數(shù)據(jù)同步的問題

    大家都知道canal是阿里巴巴旗下的一款開源工具,純java開發(fā),支持mysql數(shù)據(jù)庫,本文給大家介紹SpringBoot整合Canal數(shù)據(jù)同步的問題,需要的朋友可以參考下
    2022-03-03
  • Springboot中的@Order如何使用

    Springboot中的@Order如何使用

    本文主要介紹了Springboot中的@Order如何使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 使用Netty進(jìn)行編解碼的操作過程詳解

    使用Netty進(jìn)行編解碼的操作過程詳解

    這篇文章主要介紹了使用Netty進(jìn)行編解碼的操作過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Spring Boot異步調(diào)用@Async過程詳解

    Spring Boot異步調(diào)用@Async過程詳解

    這篇文章主要介紹了Spring Boot異步調(diào)用@Async過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 23種設(shè)計模式(13)java觀察者模式

    23種設(shè)計模式(13)java觀察者模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計模式之java觀察者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • SpringMVC實現(xiàn)表單驗證功能詳解

    SpringMVC實現(xiàn)表單驗證功能詳解

    這篇文章主要為大家詳細(xì)介紹了SpringMVC 表單驗證的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論