中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot怎么開啟一個監聽線程執行任務

發布時間:2023-02-28 16:16:27 來源:億速云 閱讀:76 作者:iii 欄目:開發技術

這篇文章主要介紹“springboot怎么開啟一個監聽線程執行任務”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“springboot怎么開啟一個監聽線程執行任務”文章能幫助大家解決問題。

    springboot開啟一個監聽線程執行任務

    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中監聽事件的創建流程

    事件監聽有同步和異步兩種方式,springboot項目中提供了一個用于異步處理的注解:@Async。

    事件的大體步驟

    • 1:定義一個事件。

    • 2:  創建一個監聽器。

    • 3:確保監聽器在容器內。

    • 4:發布事件,進行測試。

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

    首先,我們先創建一個springboot項目。

    第一種

    1:定義一個事件,需要繼承ApplicationEvent

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

    2:創建一個監聽器。直接實現ApplicationListener接口,重寫其中onApplicationEvent方法.

    public class MyEventListener implements ApplicationListener<MyEvent> {
        @Override
        public void onApplicationEvent(MyEvent event) {
            System.out.println("現在開始執行監聽器中的內容,我是直接實現ApplicationListener接口的方式進行的");
            System.out.println("event.getSource() = " + event.getSource());
        }
    }

    3:將監聽器手動添加進應用容器內,并進行發布事件。

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

    4:啟動主啟動類,進行打印測試。

    第二種

    1:同第一種的1

    2:創建一個監聽器。

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

    3:發布事件,后續進行啟動類測試即可。

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

    第三種

    全部采用注解的方式

    1:同第一種的1

    2:創建一個監聽器。

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

    3:發布事件,后續進行啟動類測試即可。

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

    以上就是三種創建的方式。

    下面是代碼的結構圖:

    springboot怎么開啟一個監聽線程執行任務

    關于“springboot怎么開啟一個監聽線程執行任務”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    饶河县| 临高县| 精河县| 安平县| 湘潭县| 娄烦县| 甘泉县| 濮阳县| 陵水| 类乌齐县| 临武县| 盐源县| 民丰县| 宣城市| 仁布县| 双江| 论坛| 汤原县| 岢岚县| 文水县| 瑞金市| 吉安县| 新余市| 鸡东县| 离岛区| 三台县| 湖北省| 克东县| 津南区| 荆门市| 屏东县| 沈丘县| 武汉市| 图片| 长沙县| 怀安县| 津市市| 镇坪县| 钦州市| 河津市| 上杭县|