最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot如何開啟一個(gè)監(jiān)聽線程執(zhí)行任務(wù)

 更新時(shí)間:2023年02月28日 14:34:54   作者:KillCom  
這篇文章主要介紹了springboot如何開啟一個(gè)監(jiān)聽線程執(zhí)行任務(wù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot開啟一個(gè)監(jiān)聽線程執(zhí)行任務(wù)

public class StartApplicationListener implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        ApplicationContext applicationContext = contextRefreshedEvent.getApplicationContext();
        ApplicationContext parent = applicationContext.getParent();
        if (parent == null) {
            CacheManager cacheManager = applicationContext.getBean(CacheManager.class);
            Cache cache = cacheManager.getCache(MsConstants.NODE_CACHE_NAME);
           new Thread(new Runnable() {
               @Override
               public void run() {
                  //代碼
                 
               }
           }).start();
        }
    }
public static void main(String[] args) {
    SpringApplication app = new SpringApplication(FigureServerApplication.class);
    app.addListeners(new StartApplicationListener());
    app.run(args);
}

springboot中監(jiān)聽事件的創(chuàng)建流程

事件監(jiān)聽有同步和異步兩種方式,springboot項(xiàng)目中提供了一個(gè)用于異步處理的注解:@Async。

事件的大體步驟

  • 1:定義一個(gè)事件。
  • 2:  創(chuàng)建一個(gè)監(jiān)聽器。
  • 3:確保監(jiān)聽器在容器內(nèi)。
  • 4:發(fā)布事件,進(jìn)行測試。

廢話不多說,簡單敘述幾個(gè)不同方式的demo。

首先,我們先創(chuàng)建一個(gè)springboot項(xiàng)目。

第一種

1:定義一個(gè)事件,需要繼承ApplicationEvent

public class MyEvent extends ApplicationEvent {
? ? public MyEvent(Object source) {
? ? ? ? super(source);
? ? ? ? System.out.println("我是一個(gè)事件,目前在事件的構(gòu)造器內(nèi)");
? ? }
}

2:創(chuàng)建一個(gè)監(jiān)聽器。直接實(shí)現(xiàn)ApplicationListener接口,重寫其中onApplicationEvent方法.

public class MyEventListener implements ApplicationListener<MyEvent> {
? ? @Override
? ? public void onApplicationEvent(MyEvent event) {
? ? ? ? System.out.println("現(xiàn)在開始執(zhí)行監(jiān)聽器中的內(nèi)容,我是直接實(shí)現(xiàn)ApplicationListener接口的方式進(jìn)行的");
? ? ? ? System.out.println("event.getSource() = " + event.getSource());
? ? }
}

3:將監(jiān)聽器手動(dòng)添加進(jìn)應(yīng)用容器內(nèi),并進(jìn)行發(fā)布事件。

@SpringBootApplication
public class EventTestApplication {
? ? public static void main(String[] args) {
// ? ? ? ?SpringApplication.run(EventTestApplication.class, args);
? ? ? ? //第一種:自己手動(dòng)將監(jiān)聽器添加到application中
? ? ? ? SpringApplication application = new SpringApplication(EventTestApplication.class);
? ? ? ? //添加監(jiān)聽器
? ? ? ? application.addListeners(new MyEventListener());
? ? ? ? ConfigurableApplicationContext context = application.run(args);
? ? ? ? //進(jìn)行發(fā)布事件
? ? ? ? context.publishEvent(new MyEvent("Event數(shù)據(jù)源"));
? ? ? ? context.close();
? ? }
}

4:啟動(dòng)主啟動(dòng)類,進(jìn)行打印測試。

第二種

1:同第一種的1

2:創(chuàng)建一個(gè)監(jiān)聽器。

/**
?*第二種:打上Compoent注解, ?將事件監(jiān)聽器自動(dòng)加入到應(yīng)用容器中
?* 這種方式不需要手動(dòng)加入到容器中。
?* */
@Component
public class MyEventListener2 implements ApplicationListener<MyEvent> {
? ? @Override
? ? public void onApplicationEvent(MyEvent event) {
? ? ? ? System.out.println("現(xiàn)在開始執(zhí)行監(jiān)聽器中的內(nèi)容,我是打Compoent注解的方式進(jìn)行的");
? ? ? ? System.out.println("event.getSource() = " + event.getSource());
? ? }
}

3:發(fā)布事件,后續(xù)進(jìn)行啟動(dòng)類測試即可。

@SpringBootApplication
public class EventTestApplication {
? ? public static void main(String[] args) {
? ? ? ? ConfigurableApplicationContext context = SpringApplication.run(EventTestApplication.class, args);
? ? ? ? //發(fā)布事件
? ? ? ? context.publishEvent(new MyEvent("source"));
? ? ? ? context.close();
? ? }
}

第三種

全部采用注解的方式

1:同第一種的1

2:創(chuàng)建一個(gè)監(jiān)聽器。

/**
?*第三種:采用@EventListener注解的方式,不需要在類上實(shí)現(xiàn)ApplicationListener接口。
?* 直接采用的是通過注解,將方法標(biāo)識為一個(gè)監(jiān)聽器。
?* */
@Component
public class MyEventListener3 {
? ? @Async//異步注解。開啟一個(gè)新線程。 去掉此注解則會(huì)變成同步監(jiān)聽。
? ? @EventListener(classes = MyEvent.class)
? ? public void TestListener(MyEvent myEvent){
? ? ? ? System.out.println("我是@EventListener注解的方式實(shí)現(xiàn)的監(jiān)聽器");
? ? ? ? System.out.println("myEvent.getSource() = " + myEvent.getSource());
? ? }
}

3:發(fā)布事件,后續(xù)進(jìn)行啟動(dòng)類測試即可。

@SpringBootApplication
public class EventTestApplication {
? ? public static void main(String[] args) {
? ? ? ? ConfigurableApplicationContext context = SpringApplication.run(EventTestApplication.class, args);
? ? ? ? //發(fā)布事件
? ? ? ? context.publishEvent(new MyEvent("source"));
? ? ? ? context.close();
? ? }
}

以上就是三種創(chuàng)建的方式。

下面是代碼的結(jié)構(gòu)圖:

總結(jié)

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

相關(guān)文章

  • java數(shù)組排序示例分享

    java數(shù)組排序示例分享

    這篇文章主要介紹了java數(shù)組排序示例,需要的朋友可以參考下
    2014-03-03
  • Springboot整合quartz實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)實(shí)例

    Springboot整合quartz實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)實(shí)例

    這篇文章主要介紹了Springboot整合quartz實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)代碼實(shí)例,Quartz?是一款功能強(qiáng)大的開源任務(wù)調(diào)度框架,幾乎可以集成到任何?Java?應(yīng)用程序中,Quartz?可用于創(chuàng)建簡單或復(fù)雜的任務(wù)調(diào)度,用以執(zhí)行數(shù)以萬計(jì)的任務(wù),需要的朋友可以參考下
    2023-08-08
  • Java圖片處理 (文字水印、圖片水印、縮放、補(bǔ)白)代碼實(shí)例

    Java圖片處理 (文字水印、圖片水印、縮放、補(bǔ)白)代碼實(shí)例

    這篇文章主要介紹了Java圖片處理 (文字水印、圖片水印、縮放、補(bǔ)白)代碼實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • MyBatis-Plus多表聯(lián)查(動(dòng)態(tài)查詢)的項(xiàng)目實(shí)踐

    MyBatis-Plus多表聯(lián)查(動(dòng)態(tài)查詢)的項(xiàng)目實(shí)踐

    本文主要介紹了MyBatis-Plus多表聯(lián)查(動(dòng)態(tài)查詢)的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • idea快速搭建spring cloud注冊中心與注冊的方法

    idea快速搭建spring cloud注冊中心與注冊的方法

    這篇文章主要介紹了idea快速搭建spring cloud注冊中心與注冊的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • SpringBoot基于Actuator遠(yuǎn)程關(guān)閉服務(wù)

    SpringBoot基于Actuator遠(yuǎn)程關(guān)閉服務(wù)

    這篇文章主要介紹了SpringBoot基于Actuator遠(yuǎn)程關(guān)閉服務(wù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 解決json串和實(shí)體類字段不一致的問題

    解決json串和實(shí)體類字段不一致的問題

    這篇文章主要介紹了解決json串和實(shí)體類字段不一致的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • java 如何遠(yuǎn)程控制tomcat啟動(dòng)關(guān)機(jī)

    java 如何遠(yuǎn)程控制tomcat啟動(dòng)關(guān)機(jī)

    這篇文章主要介紹了java 遠(yuǎn)程控制tomcat啟動(dòng)關(guān)機(jī)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫分表

    SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫分表

    本文主要介紹了SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫分表,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Jenkins自動(dòng)化打包為war包

    Jenkins自動(dòng)化打包為war包

    這篇文章主要介紹了Jenkins自動(dòng)化打包為war包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論

长宁区| 江孜县| 天峻县| 专栏| 南华县| 楚雄市| 新疆| 竹山县| 威远县| 马山县| 巴彦淖尔市| 宜阳县| 乐都县| 大化| 石城县| 奉新县| 阿鲁科尔沁旗| 务川| 裕民县| 四平市| 东光县| 渝中区| 黎城县| 灵武市| 辉县市| 大同市| 霍州市| 汝阳县| 绩溪县| 山丹县| 长兴县| 台南市| 池州市| 洱源县| 周口市| 长兴县| 焦作市| 罗平县| 温泉县| 临沧市| 开封县|