SpringBoot中异步调用的使用
同步请求是会一直等待服务端相应的,需要返回结果给客户端的;而异步调用服务端会马上返回给客户端响应,完成这次整个的请求,至于异步调用的任务服务端后台自己慢慢跑就行,客户端不会关心。
- 开启异步调用,在启动类增加
@EnableAsync
使异步调用@Async
注解生效
@EnableAsync
public class DbCompareApplication {
public static void main(String[] args) {
SpringApplication.run(DbCompareApplication.class, args);
}
}
- 在需要异步调用的方法,增加注解
@Async
@Component
public class TestSleep {
@Async
public void sleep(){
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("sleep");;
}
}
- Controller调用异步方法
@RestController
public class TaskController {
@Autowired
TestSleep testSleep;
@GetMapping("/test")
public String test(){
testSleep.sleep();
return "ok";
}
}
- 效果
- 如果不加
@Async
注解,客户端的调用,需要10秒才能返回结果; - 加了
@Async
注解,客户端的调用立马返回结果,调用的方法在服务端后台运行.
- 注意事项:部分情况下
@Async
注解失效
- 调用同一个类下注有
@Async
异步方法 - 调用的是静态(
static
)方法 - 调用(
private
)私有化方法