springboot开启异步(SpringBoot 配置 异步 AsyncEventBus)

本文目录
- SpringBoot 配置 异步 AsyncEventBus
- Spring Boot 异步任务 -- @EnableAsync 详解
- SpringBoot中开启异步任务
- SpringBoot实现http请求的异步长轮询【2】— AsyncHandlerInterceptor方式
SpringBoot 配置 异步 AsyncEventBus
1-在使用之前,先说明:
guava 的 事件操作分类型: 1-同步 EventBus 2-异步:AsyncEventBus
咱们这里说明异步的使用:
2-配置 线程自己控制
@Bean
public AsyncEventBusasyncEventBus() {
// 创建一个核心3线程,最大10线程的线程池,配置DiscardPolicy策略,抛弃当前的任务
ThreadPoolExecutor threadPoolExecutor =new ThreadPoolExecutor(3, 10, 60, TimeUnit.SECONDS, new ArrayBlockingQueue《》(10), new ThreadPoolExecutor.DiscardPolicy());
return new AsyncEventBus(threadPoolExecutor);
}
3 -注册使用:例如:日志的异步记录
@Component
public class AsyncEventListener {
private AsyncEventBusasyncEventBus;
AsyncEventListener(AsyncEventBus asyncEventBus,SysLoginLogService sysLoginLogService){
this.asyncEventBus = asyncEventBus;
this.sysLoginLogService = sysLoginLogService;
}
/**
* 注册这个监听器
*/
@PostConstruct
public void register() {
asyncEventBus.register(this);
}
/**
* 添加登录日志信息
* @param sysLoginLog 登录日志
*/
@Subscribe
public void addLoginLog(SysLoginLog sysLoginLog) {
sysLoginLogService.save(sysLoginLog);
}
}
4- 各个接口的调用 使用异步的post
AsyncEventBus asyncEventBus;
asyncEventBus.post(sysLoginLog)
Spring Boot 异步任务 -- @EnableAsync 详解
@EnableAsync 注解启用了 Spring 异步方法执行功能,在 Spring Framework API 中有详细介绍。
@EnableAsync 默认启动流程:
1 搜索关联的线程池定义:上下文中唯一的 TaskExecutor 实例,或一个名为 taskExecutor 的 java.util.concurrent.Executor 实例;
2 如果以上都没找到,则会使用 SimpleAsyncTaskExecutor 处理异步方法调用。
注意:具有 void 返回类型的带注释方法不能将任何异常发送回调用者,默认情况下此类未捕获异常只会被记录日志。
定制 @EnableAsync 启动行为:
1 实现 AsyncConfigurer 接口
2 实现 getAsyncExecutor() 方法自定义 java.util.concurrent.Executor
3 实现 getAsyncUncaughtExceptionHandler() 方法自定义 AsyncUncaughtExceptionHandler
示例:修改 AsyncConfig 配置类实现
SpringBoot中开启异步任务
顾名思义,异步指的是处理数据时、与主请求不在同一干线、分开支路处理请求,可以为用户提供较为良好的体验、在开发过程中,不影响正常使用的前提下,建议使用异步来处理请求。
1、在主启动类加上注解@EnableAsync
2、在要开启异步任务的方法上加注解@Async
3、异步任务开启成功
SpringBoot实现http请求的异步长轮询【2】— AsyncHandlerInterceptor方式
客户端调用服务端接口,服务端这个接口比较耗时。为了优化服务端的性能。
服务端收到servlet请求后,释放掉servlet占用的线程资源。开启一个异步线程去处理耗时的操作。当耗时操作处理完成后,将结果返回给客户端。
***隐藏网址***
可以使用接口AsyncHandlerInterceptor实现来拦截涉及异步处理的请求,而不是使用HandlerInterceptor。
HandlerInterceptorAdapter适配器,适配了AsyncHandlerInterceptor和HandlerInterceptor,推荐使用这个来实现。
上文说到,释放Servlet线程,交由指定的线程池去处理,那么如何去定义指定的线程池?
注意:方法返回的是Callable。
执行效果如下图所示:
SpringMVC-使用AsyncHandlerInterceptor拦截异步处理请求

更多文章:
form表单制作(为什么制作的form表单会在网页显示中多出一行)
2026年10月11日 09:10
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50



