问题描述: 在写接口的时候,遇到一个问题,前端要求先返回结果再去运行其他代码。
问题分析: 因为一些特殊原因,本次使用的是网易发送邮件,也就是用你的账号给其他人发送邮件这种,这也存在一些问题,就是不能在短时间内大量发送邮件信息,于是我加了一个定时器。
限制为每半分钟发送一次,后台在接收到前端发送的数组时,数组中的数据每过半分钟才能执行一条,也就是发送给好几个人的邮件,过了半分钟才能给下一个人发送邮件这种情况。
于是这就产生了一个问题,需要等这些定时器都执行完毕才能获取到接口返回的结果。
而且这样也会造成阻塞等待,比较耗时。
问题解决: 加入异步成功解决,即为主进程直接返回一个结果,另一个进程则去执行那个比较耗时的。
具体实现:
1.在启动类上加上注解@EnableAsync。
2.在service层的方法上加上@Async 注解。
3.在controller层正常调用此方法就行。
分析总结:
-
@Async 注解可以添加到类上,表示该类里面的所有方法都是异步执行,也可以添加到方法上,表示该方法异步执行。 -
平时异步用的少一点,现在用过之后才发现,还挺不错。 -
异步应用场景: 当一个应用程序,如:去网上拿一个数据,需要等待很久,此时我们就可以加入一个异步方法,使拿到数据后,异步去运行指定方法使程序提速。