springboot学习笔记13:异步任务
- 创建一个service包
- 创建一个类AsyncService
异步处理还是非常常用的,当我们在网站上发送邮件,后台会去发送邮件,但此时前台实际上是没有任何操作的,它跟着后台一直在响应,直到邮件发送完毕,响应才会成功,而多线程就可以很好地解决这个问题,所以我们一般会采用多线程的方式去处理这些异步任务。
我们来编写一个方法,假装正在处理数据,使用线程设置一些延时,模拟同步等待的情况
@Service
public class AsyncService {
public void hello(){
try {
Thread.sleep(3000);//这里是指线程等待3s
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据处理中....");
}
}
- 编写controller包
- 编写AsyncController类
@RestController
public class AsyncController {
@Autowired
AsyncService asyncService;
@GetMapping("/hello")
public String hello(){
asyncService.hello();
return "success";
}
}
- 进行测试,在3秒后才会出现success,这就是同步等待的情况。
而我们要想解决这个同步等待的问题,只需要让其变成异步任务即可,而变成异步任务我们只需要加上几个注解就可以了! - 给hello方法添加@Async注解;
//告诉Spring这是一个异步方法
@Async
public void hello(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("数据处理中....");
}
这样SpringBoot就会自己开一个线程池,进行调用!但是要让这个注解生效,我们还需要在主程序上添加一个注解@EnableAsync ,以便开启异步注解功能;
@EnableAsync
@SpringBootApplication
public class SpringbootTaskApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootTaskApplication.class, args);
}
}
测试成功!