Rumah  >  Artikel  >  Java  >  Bagaimana untuk memulakan benang mendengar untuk melaksanakan tugas dalam springboot

Bagaimana untuk memulakan benang mendengar untuk melaksanakan tugas dalam springboot

WBOY
WBOYke hadapan
2023-05-21 20:28:121158semak imbas

    springboot memulakan utas mendengar untuk melaksanakan tugas

    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);
    }

    Proses penciptaan acara mendengar dalam springboot

    Dalam projek Spring Boot, anda boleh Gunakan anotasi @Async untuk melaksanakan pemprosesan tak segerak dan mendengar acara mempunyai dua kaedah: segerak dan tak segerak.

    Langkah am acara

    • 1: Tentukan acara.

    • 2: Cipta pendengar.

    • 3: Pastikan pendengar berada di dalam bekas.

    • 4: Terbitkan acara untuk ujian.

    Tanpa berlengah lagi, mari kita terangkan secara ringkas demo beberapa kaedah yang berbeza.

    Mula-mula, mari buat projek springboot.

    Jenis pertama

    1: Tentukan acara dan perlu mewarisi ApplicationEvent

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

    2: Cipta pendengar. Laksanakan secara langsung antara muka ApplicationListener dan tulis semula kaedah 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: Tambahkan pendengar secara manual pada bekas aplikasi dan terbitkan acara tersebut.

    @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: Mulakan kelas permulaan utama dan lakukan ujian pencetakan.

    Jenis kedua

    1: Sama seperti jenis pertama 1

    2: Cipta pendengar.

    /**
     *第二种:打上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: Terbitkan acara dan kemudian lakukan ujian permulaan.

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

    Jenis ketiga

    semua menggunakan anotasi

    1: Sama seperti jenis pertama 1

    2: Cipta Pendengar .

    /**
     *第三种:采用@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: Terbitkan acara dan kemudian lakukan ujian permulaan.

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

    Berikut ialah gambar rajah struktur kod:

    Bagaimana untuk memulakan benang mendengar untuk melaksanakan tugas dalam springboot

    Atas ialah kandungan terperinci Bagaimana untuk memulakan benang mendengar untuk melaksanakan tugas dalam springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam