springboot如何开启一个监听线程执行任务
作者:KillCom 发布时间:2022-01-09 08:44:48
标签: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();
}
}
来源:https://blog.csdn.net/samHuangLiang/article/details/80268530
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 本文实例讲述了Java使用Jdbc连接Oracle执行简单查询操作。分享给大家供大家参考,具体如下:Java Jdbc 连接 Oracle
- Spring Security和Shiro的区别相同点1、认证功能2、授权功能3、加密功能4、会话管理5、缓存支持6、rememberMe功
- Bean是Spring框架中最核心的两个概念之一(另一个是面向切面编程AOP)。1 定义Spring 官方文档对 bean 的解释是:In
- 目录1,基本介绍2,HttpURLConnection实现3.HttpClient实现4.Spring的RestTemplate1,基本介绍
- 在java中常常会遇到这样一个问题,在实际应用中,总会碰到对List排序并过滤重复的问题,如果List中放的只是简单的String类型过滤s
- 场景网站智能问答场景,需要对多个分类查询,结果聚合展示由于每种分类都有自己的业务逻辑,有的需要查询数据库中间库,有的需要查询elastics
- 为什么要写这篇文章经过了若干年的发展,Java逐步从java8升级为java11,java17。让我们对比学习一下最新一版的LTS版本和ja
- 一、项目简述本系统功能包括: 系统管理,招生计划,学生管理,录取结果,自动分配,调剂管理等等。二、项目运行环境配置:Jdk1.8 + Tom
- Lambda 表达式最早接触到 Lambda 表达式的时候,是在学习 python 的时候,当时就很好奇。后来,才发现 Java 也有这个方
- 这篇文章主要介绍了JavaWeb项目Servlet无法访问问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- Lua是目前国内使用最多的热更语言,基于Lua的热更框架也非常多,最近学习了一下ToLua的热更框架,主要使用的问题在于C#和Lua之间的互
- 现在我们常见的一些关于Linux的系统很多,但是使用的更多的一般都是CentOS和Ubuntu,今天我就来记录一下关于centos下java
- 在网上找了半天,说的都没有解决我的问题,我自己花了点时间在idea中找到并解决了问题,希望可以帮助到大家。File---->setti
- 目录Spring事件驱动源码实战在项目实际开发过程中,我们有很多这样的业务场景:一个事务中处理完一个业务逻辑后需要跟着处理另外一个业务逻辑,
- 一、定义责任链模式(Chain of Responsibility Pattern):避免将一个请求的发送者与接受者耦合在一起,让多个对象都
- java 使用foreach遍历集合元素的实例1 代码示例import java.util.*; public class ForeachT
- 目录一、System.out.println(最简单)二、java.util.logging(相对简单)三、log4j(最强大)四、comm
- 1 spring-retry是什么?以往我们在进行网络请求的时候,需要考虑网络异常的情况,本文就介绍了利用spring-retry,是spr
- 本文实例讲述了Java删除二叉搜索树的任意元素的方法。分享给大家供大家参考,具体如下:一.删除思路分析在删除二叉搜索树的任意元素时,会有三种
- 如何给请求添加header背景:在集成了swagger的项目中,调用后台接口往往会经过一些自定义的 * ,而 * 加了token限制的话,直