为什么要使用异步事件呢?就是为了快速响应前端的请求,让那些耗时较长的任务在后台独立执行,比如大量数据的导出,邮件发送等等。使用异步事件,可以很好地提高用户的体验。那么异步事件该如何使用呢,分为如下几步:
1.定义事件
定义一个事件类,继承ApplicationEvent;
import org.springframework.context.ApplicationEvent;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
/**
* 自定义spring事件基类,所有的事件继承该基类
*/
@Setter
@Getter
@ToString
public class CommonEvent extends ApplicationEvent {
private static final long serialVersionUID = -5824265251729348221L;
/** 事件的内容(具有实际业务意义的内容) */
private String eventContent;
public CommonEvent(Object source) {
super(source);
}
public CommonEvent(Object source, String eventContent) {
super(source);
this.eventContent = eventContent;
}
}
/**
* spring容器事件,封装所有的运行时异常事件
*/
public class BatchSendExMsgEmailEvent extends CommonEvent {
public BatchSendExMsgEmailEvent(Object source) {
super(source);
}
private static final long serialVersionUID = -1394667650154523969L;
}
2.发布事件
发布一个事件,使用ApplicationContext.publish(event);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
// 发布运行时异常事件
BatchSendExMsgEmailEvent event = new BatchSendExMsgEmailEvent(this);
event.setEventContent(sw.toString());
applicationContext.publishEvent(event);
3.监听事件并且进行处理
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Component
public class ContainerEventListener {
private static final Logger logger = LoggerFactory.getLogger(ContainerEventListener.class);
@Autowired
private EmailService emailService;
@Value("${email_receivers}")
private String receivers;
@Value("${email_subject}")
private String emailSubject;
//@Async注解指定该事件异步执行,必须配合启动类的@EnableAsync
@Async
@EventListener
public void handleBatchSendExMsgEmailEvent(BatchSendExMsgEmailEvent event) {
logger.info("监听到了运行时异常事件");
emailService.batchSendSimpleMail(receivers, emailSubject, "具体的异常信息为: " + event.getEventContent());
}
}
相关推荐
在Spring Boot中,启用`async`异步调用是一项关键功能,它允许应用程序在处理请求时启动一个后台任务,而不必等待该任务完成。这在处理耗时操作时尤其有用,如大数据计算、发送电子邮件或文件上传等。下面将详细阐述...
SpringBoot通过其强大的事件驱动机制和任务调度功能,支持异步处理。 解耦是软件设计中的一个重要原则,它旨在降低组件之间的依赖性,使得每个组件可以独立地开发、测试和维护。在SpringBoot中,我们可以利用Spring...
【SpringBoot实现异步】 SpringBoot提供了一种简单的方式来实现应用中的异步处理,通过`@EnableAsync`注解在主配置类上启用异步功能。这样,你可以使用`@Async`注解来标记那些需要异步执行的方法,从而提高应用的...
JAVA语言Springboot 用于异步线程的demo纯代码
在Spring Boot项目中,异步调用是一种提升应用性能的关键技术。它允许应用程序在执行一个耗时操作(如数据库查询、文件处理等)时,不阻塞主线程,从而提高系统的响应速度和并发能力。Spring Boot提供了简单易用的...
每次日志输出到文件都会进行一次磁盘IO,在多应用的时候这种效果会导致一定的线程运行延迟,所以可以采用异步的方式处理。 采用异步写日志的方式,通过不让主线程去写日志文件而减少磁盘IO,避免并发下造成线程阻塞...
结合`@Async`和`@Scheduled`,可以在Spring Boot应用中实现复杂的时间驱动和事件驱动的异步任务处理。 例如,在`demo`项目中,可能包含了一个实现了异步任务和定时任务的示例应用。开发者可以参考该项目的代码,...
与之相比,异步调用指程序在执行时,无需等待执行的返回值可继续执行后面的代码。异步调用可以并发执行,提高执行效率,在相同的时间做更多的事情。 2. Spring Boot 异步调用的实现方法 在 Spring Boot 中,使用 `...
基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码。基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码。基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码。基于SpringBoot+RabbitMQ用户注册实现...
当异步任务完成后,通过回调函数或事件驱动来通知主线程。 2. **Spring Boot异步处理的核心概念** - **AsyncConfigurer接口**:这是Spring Boot提供的一种配置异步任务的方式,通过实现这个接口可以自定义线程池和...
个人看法:我们不使用springboot异步,也可以实现异步,但这时我们自己要建立一个全局的线程池,在调用方法时,还要使用新线程包装一下。这样最终效果虽一样,但过程要麻烦些,后面维护也麻烦些。所以推荐使用...
Springboot异步处理架构主要包括三个部分:异步处理器、异步处理队列和异步处理结果存储器。异步处理器负责处理异步请求,异步处理队列负责存储异步请求,异步处理结果存储器负责存储异步处理结果。使用Springboot...
SpringBoot 异步调用方法详解 SpringBoot 框架提供了多种方式来实现异步调用,异步调用可以提高系统的性能和响应速度。在本文中,我们将详细介绍如何使用 SpringBoot 实现异步调用,并分析异步调用的优缺点和实现...
SpringBoot - Async异步处理
然后,需要设置异步上下文的监听器,以便处理异步请求的开始、完成、异常和超时等事件。最后,需要在异步线程中执行耗时的处理操作,并在处理完成后通知异步上下文,以便释放资源。 方式二:使用Callable方式实现...
SpringBoot异步任务使用方法详解 SpringBoot异步任务使用方法详解是基于Java的SpringBoot框架中的一种异步任务处理机制。该机制允许开发者在SpringBoot应用程序中执行异步任务,以提高应用程序的性能和响应速度。 ...
01-SpringBoot介绍 02-SpringBoot为什么火?...19-SpringBoot实现异步 20-SpringBoot自定义参数 21-SpringBoot启动端口访问路径 22-yml配置文件+端口占用解决方法 23-SpringBoot多环境区分 24-SpringBoot打包发布
本话题主要探讨如何利用SpringBoot和Redis实现事件的发布订阅功能,这对于实现分布式系统中的异步通信和解耦至关重要。 首先,我们需要理解SpringBoot的核心特性。SpringBoot是Spring框架的一个简化版本,它旨在...
Spring Boot 实现异步请求(Servlet 3.0) Spring Boot 实现异步请求是指在 Spring Boot 应用程序中使用异步处理机制来处理请求,以提高系统的性能和吞吐量。在 Spring 3.2 及以后版本中增加了对请求的异步处理,...