Rumah > Java > javaTutorial > teks badan

Bagaimana untuk memulakan benang mendengar untuk melaksanakan tugas dalam springboot

WBOY
Lepaskan: 2023-05-21 20:28:12
ke hadapan
1228 orang telah melayarinya

    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();
            }
        }
    Salin selepas log masuk
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(FigureServerApplication.class);
        app.addListeners(new StartApplicationListener());
        app.run(args);
    }
    Salin selepas log masuk

    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("我是一个事件,目前在事件的构造器内");
        }
    }
    Salin selepas log masuk

    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());
        }
    }
    Salin selepas log masuk

    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();
        }
    }
    Salin selepas log masuk

    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());
        }
    }
    Salin selepas log masuk

    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();
        }
    }
    Salin selepas log masuk
    Salin selepas log masuk

    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());
        }
    }
    Salin selepas log masuk

    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();
        }
    }
    Salin selepas log masuk
    Salin selepas log masuk

    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!

    Label berkaitan:
    sumber:yisu.com
    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
    Tutorial Popular
    Lagi>
    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan