异步任务
异步处理还是非常常用的,比如我们在网站上发送邮件,后台会去发送邮件,此时前台会造成响应不动,直到邮件发送完毕,响应才会成功,所以我们一般会采用多线程的方式去处理这些任务。
编写方法,假装正在处理数据,使用线程设置一些延时,模拟同步等待的情况
-
创建一个新的 SpringBoot 项目,导入 Web 依赖
-
创建 service 包以及 controller 包
-
在 service 中创建 AsyncService,并对其模拟异步
package com.aze.service; import org.springframework.stereotype.Service; @Service public class AsyncService { public void hello(){ try { Thread.sleep(3000); // 3s } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("数据正在处理中..."); } }
-
在 controller 包中,创建 AsyncController
package com.aze.controller; import com.aze.service.AsyncService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class AsyncController { @Autowired AsyncService asyncService; @RequestMapping("/hello") public String hello(){ asyncService.hello(); return "OK!"; } }
-
启动项目进行测试,访问
http://localhost:8080/hello
,发现进入/hello
需要 3s 才会显示成功,同步等待这就导致了用户体验差了 -
如果想让用户直接得到消息,就在后台使用多线程的方式进行处理即可,但是每次都需要自己手动去编写多线程的实现的话,太麻烦了,我们只需要用一个简单的办法,在我们的方法上加一个简单的注解即可
package com.<