Spring / Spring boot 基于注解异步编程@Async

紧接上一篇文章,有大神评论说基于 WebSyncTask
的异步任务处理和基于注解 @Async
的异步任务处理之间有什么区别,其实大神评论的时候我也不清楚到底啥区别,所以就去学了一波!借此机会,总结如下:

一、Spring中注解异步任务开发步骤

@@EnableAsync
@Async
FutureResult

对于基于注解的异步任务编程示例代码,小编已经将代码合并到上篇博客的代码中:

代码地址为: github.com/SmallerCode…

哈哈,给小编个start嘛!

二、异步任务基本原理

异步的概念小编之前也有提及过,很简单的道理就是我找你办事,我不用等你把事情办完,我又可以脱身去做别的事情了,举个例子就是当你发微信给你朋友,说成留言可能会更准确,等你朋友看到后把事情办好通知你就可以了。当然对于web请求响应而言,异步可以理解为将当前处理请求的线程释放掉,后台偷偷开启一个线程去执行,执行完成之后再返回,让处理请求的线程可以去处理其他进来的请求。

nginx之所以并发那么优秀,我觉得linuxepoll
模型可以了解下。还有,可以了解下 servlet 3.0
之后对异步的支持。

三、异步任务类型

由于处理请求的线程已经被释放掉,因此要求我们的异步任务线程要和当前请求的上下文进行关联,才能正常的将数据响应出去。异步任务不永远都是顺利的,可能有如下三种情况:

void

对于获取返回值处理

采用 ResultFuture
即可返回一个 Future
对象,通过 Future
对象的 get
方法即可得到返回值。

对于异常信息处理

基于注解的异步任务异常处理和基于 WebAsynctask
不同,前者采用 AsyncConfigurer
结合自定义异常类 AsyncUncaughtExceptionHandler
的实现类进行处理。

谢谢阅读,所有上面讲到的代码实现,都可以在上面的github地址看到,如有错误,欢迎pr,如果对你有帮助,请给个star,么么哒!

原文 

https://juejin.im/post/5b23642be51d4558d53fdbab

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Spring / Spring boot 基于注解异步编程@Async

分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址