首页 > Java > java教程 > springboot怎么开启一个监听线程执行任务

springboot怎么开启一个监听线程执行任务

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2023-05-21 20:28:12
转载
1624 人浏览过

    springboot开启一个监听线程执行任务

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

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

            }

        }

    登录后复制

    1

    2

    3

    4

    5

    public static void main(String[] args) {

        SpringApplication app = new SpringApplication(FigureServerApplication.class);

        app.addListeners(new StartApplicationListener());

        app.run(args);

    }

    登录后复制

    springboot中监听事件的创建流程

    在Spring Boot项目中,您可以使用注解@Async来实现异步处理,而事件监听有同步和异步两种方式可供选择。

    事件的大体步骤

    • 1:定义一个事件。

    • 2: 创建一个监听器。

    • 3:确保监听器在容器内。

    • 4:发布事件,进行测试。

    废话不多说,简单叙述几个不同方式的demo。

    首先,我们先创建一个springboot项目。

    第一种

    1:定义一个事件,需要继承ApplicationEvent

    1

    2

    3

    4

    5

    6

    public class MyEvent extends ApplicationEvent {

        public MyEvent(Object source) {

            super(source);

            System.out.println("我是一个事件,目前在事件的构造器内");

        }

    }

    登录后复制

    2:创建一个监听器。直接实现ApplicationListener接口,重写其中onApplicationEvent方法.

    1

    2

    3

    4

    5

    6

    7

    public class MyEventListener implements ApplicationListener<MyEvent> {

        @Override

        public void onApplicationEvent(MyEvent event) {

            System.out.println("现在开始执行监听器中的内容,我是直接实现ApplicationListener接口的方式进行的");

            System.out.println("event.getSource() = " + event.getSource());

        }

    }

    登录后复制

    3:将监听器手动添加进应用容器内,并进行发布事件。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    @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:创建一个监听器。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    /**

     *第二种:打上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:发布事件,后续进行启动类测试即可。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    @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:创建一个监听器。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    /**

     *第三种:采用@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:发布事件,后续进行启动类测试即可。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    @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怎么开启一个监听线程执行任务的详细内容。更多信息请关注PHP中文网其他相关文章!

    相关标签:
    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板