在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送邮件,批量发送短信等操作 容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务。而在Spring 3+之后,就已经内置了 @Async 注解来完美解决这个问题,从而提高效率。
使用的注解:
@EnableAysnc 启动类上开启基于注解的异步任务
@Aysnc 标识的方法会异步执行
异步任务实战操作如下:
-
新建springboot项目
-
Service层模拟操作数据库:
@Service
public class AsyncService {
//批量操作数据
@Async
public void batchAdd() {
try {
Thread.sleep(3 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("批量数据保存中....");
}
}
- Controller层测试:
@RestController
public class PageController {
@Autowired
AsyncService asyncService;
/**
* 测试异步任务
*
* 当controller层调用service层的方法时,
* 由于service方法的上面加了异步的注解,
* controller层的接口直接进行下面的程序运行。
* 程序运行过程相当于开辟一个新的线程进入service方法,而controller层继续走自己的程序。
* @return
*/
@GetMapping("/batchAdd")
public String batchAdd(){
asyncService.batchAdd();
return "success";
}
}