大家好,我是空灵。我将继续为您带来Springboot Old Bird系列的第六篇文章。让我们谈谈如何在Springboot项目中实现异步编程。
首先,让我们看一下为什么在春季使用异步编程以及它可以解决什么问题?
在Springboot的日常开发中,通常称为同步通话。但是,实际上,它们非常适合异步处理,例如注册新用户,发送100点;或成功下订单,发送推送消息等等。
例如,为什么需要与新的注册用户打交道?
因此,对2个问题,性能和容错性的异步解决方案。
对于异步方法调用,请从Spring3提供注释。我们只需要在该方法上标记此注释,以实现异步调用。
当然,我们还需要一个配置类来通过启用模块驱动程序注释打开异步功能。
步骤1:创建一个新的配置类。打开@ASYNC函数支持以打开异步任务支持。注释可以直接放置在Springboot启动类上,也可以单独放置在其他配置类上。我们选择在此处使用单独的配置类。
步骤2:在该方法上标记异步调用,以添加组件类以进行业务处理并同时添加注释,这意味着该方法是异步处理的。
步骤3:在控制器中进行异步方法调用
通过访问查看控制台日志:
可以通过日志看到:主线程无需等待异步方法执行,减少响应时间并改善接口性能。
通过以上三个步骤,我们可以在Springboot中使用异步方法来提高我们的接口性能。这很简单吗?
但是,如果您真的在真实的项目中写这篇文章,那肯定会被老鸟无情地嘲笑,就是这样吗?
由于上述代码忽略了最大的问题,因此是将线程池自定义为异步框架。
使用注释,默认情况下,使用SimpleSynctasKexecutor线程池,此线程池不是真正的线程池。
使用此线程池无法实现线程重复使用,每个呼叫都会创建一个新线程。如果系统中线程的连续创建最终会导致系统占据过多的内存并导致错误。关键代码如下:
我们还可以直接通过上述控制台日志观察。每次打印的线程名称是[task-1],[task-2],[task-3],[task-4] ...增加增加增加
因此,我们必须在弹簧中使用@Async异步框架以替换默认值时自定义线程池。
弹簧提供各种线程池:
自定义线程池后,我们可以大胆地使用提供的异步处理能力。
在开发真实的互联网项目中,一般方法是为高并发请求的高频率接口隔离。
假设现在有两个高包装的接口:一个是修改用户信息接口以刷新用户redis缓存;另一个是发送应用程序推送信息的订单接口。两个线程池通常根据接口的特征定义。目前,我们需要在使用时区分指定的线程池名称。
为@aasync指定线程池的名称
当系统中有多个线程池时,我们还可以配置默认线程池,然后为非默认异步任务指定名称名称。
配置默认线程池可以修改配置类以实现它,并重写该方法。指定默认线程池:
如下所示,该方法使用默认线程池使用线程池,这非常灵活。
异步方法通常用于日常开发中。每个人都掌握并努力尽快成为老鸟!
提示:旧鸟类系列的源代码已上传到Github。请注意公共帐户Java Ri Zhilu并回复关键字0923以获取源代码地址。