这篇文章主要介绍“SpringBoot怎么开启一个监听线程执行任务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“springboot怎么开启一个监听线程执行任务”文章能帮助大家解决问题。spring
这篇文章主要介绍“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项目中提供了一个用于异步处理的注解:@Async。
废话不多说,简单叙述几个不同方式的demo。
首先,我们先创建一个springboot项目。
定义一个事件,需要继承ApplicationEvent
public class MyEvent extends ApplicationEvent { public MyEvent(Object source) { super(source); System.out.println("我是一个事件,目前在事件的构造器内"); }}
创建一个监听器。直接实现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()); }}
将监听器手动添加进应用容器内,并进行发布事件。
@SpringBootApplicationpublic 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(); }}
启动主启动类,进行打印测试。
同第一种的1
创建一个监听器。
@Componentpublic class MyEventListener2 implements ApplicationListener<MyEvent> { @Override public void onApplicationEvent(MyEvent event) { System.out.println("现在开始执行监听器中的内容,我是打Compoent注解的方式进行的"); System.out.println("event.getSource() = " + event.getSource()); }}
发布事件,后续进行启动类测试即可。
@SpringBootApplicationpublic class EventTestApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(EventTestApplication.class, args); //发布事件 context.publishEvent(new MyEvent("source")); context.close(); }}
全部采用注解的方式
同第一种的1
创建一个监听器。
@Componentpublic class MyEventListener3 { @Async//异步注解。开启一个新线程。 去掉此注解则会变成同步监听。 @EventListener(classes = MyEvent.class) public void TestListener(MyEvent myEvent){ System.out.println("我是@EventListener注解的方式实现的监听器"); System.out.println("myEvent.getSource() = " + myEvent.getSource()); }}
发布事件,后续进行启动类测试即可。
@SpringBootApplicationpublic class EventTestApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(EventTestApplication.class, args); //发布事件 context.publishEvent(new MyEvent("source")); context.close(); }}
以上就是三种创建的方式。
下面是代码的结构图:
关于“springboot怎么开启一个监听线程执行任务”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。
--结束END--
本文标题: springboot怎么开启一个监听线程执行任务
本文链接: https://lsjlt.com/news/350299.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0