`
wuhoujian322
  • 浏览: 65078 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SpringBoot之异步事件

阅读更多

    为什么要使用异步事件呢?就是为了快速响应前端的请求,让那些耗时较长的任务在后台独立执行,比如大量数据的导出,邮件发送等等。使用异步事件,可以很好地提高用户的体验。那么异步事件该如何使用呢,分为如下几步:

 

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

}

 

}

 

0
0
分享到:
评论

相关推荐

    Springboot启用async异步调用

    在Spring Boot中,启用`async`异步调用是一项关键功能,它允许应用程序在处理请求时启动一个后台任务,而不必等待该任务完成。这在处理耗时操作时尤其有用,如大数据计算、发送电子邮件或文件上传等。下面将详细阐述...

    springboot 同步解耦 异步化

    SpringBoot通过其强大的事件驱动机制和任务调度功能,支持异步处理。 解耦是软件设计中的一个重要原则,它旨在降低组件之间的依赖性,使得每个组件可以独立地开发、测试和维护。在SpringBoot中,我们可以利用Spring...

    【java框架】SpringBoot(4)--SpringBoot实现异步、邮件、定时任务(csdn)————程序.pdf

    【SpringBoot实现异步】 SpringBoot提供了一种简单的方式来实现应用中的异步处理,通过`@EnableAsync`注解在主配置类上启用异步功能。这样,你可以使用`@Async`注解来标记那些需要异步执行的方法,从而提高应用的...

    JAVA语言Springboot 用于异步线程的demo

    JAVA语言Springboot 用于异步线程的demo纯代码

    SpringBoot项目异步调用

    在Spring Boot项目中,异步调用是一种提升应用性能的关键技术。它允许应用程序在执行一个耗时操作(如数据库查询、文件处理等)时,不阻塞主线程,从而提高系统的响应速度和并发能力。Spring Boot提供了简单易用的...

    springboot日志框架logback异步输出配置

    每次日志输出到文件都会进行一次磁盘IO,在多应用的时候这种效果会导致一定的线程运行延迟,所以可以采用异步的方式处理。 采用异步写日志的方式,通过不让主线程去写日志文件而减少磁盘IO,避免并发下造成线程阻塞...

    springboot异步任务案例

    结合`@Async`和`@Scheduled`,可以在Spring Boot应用中实现复杂的时间驱动和事件驱动的异步任务处理。 例如,在`demo`项目中,可能包含了一个实现了异步任务和定时任务的示例应用。开发者可以参考该项目的代码,...

    springboot 异步调用的实现方法

    与之相比,异步调用指程序在执行时,无需等待执行的返回值可继续执行后面的代码。异步调用可以并发执行,提高执行效率,在相同的时间做更多的事情。 2. Spring Boot 异步调用的实现方法 在 Spring Boot 中,使用 `...

    java基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码.zip

    基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码。基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码。基于SpringBoot+RabbitMQ用户注册实现异步发送验证码源码。基于SpringBoot+RabbitMQ用户注册实现...

    SpringBoot异步

    当异步任务完成后,通过回调函数或事件驱动来通知主线程。 2. **Spring Boot异步处理的核心概念** - **AsyncConfigurer接口**:这是Spring Boot提供的一种配置异步任务的方式,通过实现这个接口可以自定义线程池和...

    Springboot中异步

    个人看法:我们不使用springboot异步,也可以实现异步,但这时我们自己要建立一个全局的线程池,在调用方法时,还要使用新线程包装一下。这样最终效果虽一样,但过程要麻烦些,后面维护也麻烦些。所以推荐使用...

    Springboot实现高吞吐量异步处理详解(适用于高并发场景)

    Springboot异步处理架构主要包括三个部分:异步处理器、异步处理队列和异步处理结果存储器。异步处理器负责处理异步请求,异步处理队列负责存储异步请求,异步处理结果存储器负责存储异步处理结果。使用Springboot...

    SpringBoot开启异步调用方法

    SpringBoot 异步调用方法详解 SpringBoot 框架提供了多种方式来实现异步调用,异步调用可以提高系统的性能和响应速度。在本文中,我们将详细介绍如何使用 SpringBoot 实现异步调用,并分析异步调用的优缺点和实现...

    详解SpringBoot中异步请求和异步调用(看完这一篇就够了)

    然后,需要设置异步上下文的监听器,以便处理异步请求的开始、完成、异常和超时等事件。最后,需要在异步线程中执行耗时的处理操作,并在处理完成后通知异步上下文,以便释放资源。 方式二:使用Callable方式实现...

    SpringBoot异步任务使用方法详解

    SpringBoot异步任务使用方法详解 SpringBoot异步任务使用方法详解是基于Java的SpringBoot框架中的一种异步任务处理机制。该机制允许开发者在SpringBoot应用程序中执行异步任务,以提高应用程序的性能和响应速度。 ...

    SpringBoot视频教程 百度云

    01-SpringBoot介绍 02-SpringBoot为什么火?...19-SpringBoot实现异步 20-SpringBoot自定义参数 21-SpringBoot启动端口访问路径 22-yml配置文件+端口占用解决方法 23-SpringBoot多环境区分 24-SpringBoot打包发布

    SpringBoot + Redis实现事件的发布订阅功能

    本话题主要探讨如何利用SpringBoot和Redis实现事件的发布订阅功能,这对于实现分布式系统中的异步通信和解耦至关重要。 首先,我们需要理解SpringBoot的核心特性。SpringBoot是Spring框架的一个简化版本,它旨在...

    Spring Boot实现异步请求(Servlet 3.0)

    Spring Boot 实现异步请求(Servlet 3.0) Spring Boot 实现异步请求是指在 Spring Boot 应用程序中使用异步处理机制来处理请求,以提高系统的性能和吞吐量。在 Spring 3.2 及以后版本中增加了对请求的异步处理,...

    SpringBoot最新教程(精辟)

    01-SpringBoot介绍 02-SpringBoot为什么火?...19-SpringBoot实现异步 20-SpringBoot自定义参数 21-SpringBoot启动端口访问路径 22-yml配置文件+端口占用解决方法 23-SpringBoot多环境区分 24-SpringBoot打包发布

Global site tag (gtag.js) - Google Analytics