0%

springboot开发异步restful接口

SpringBoot中异步调用的使用

同步请求是会一直等待服务端相应的,需要返回结果给客户端的;而异步调用服务端会马上返回给客户端响应,完成这次整个的请求,至于异步调用的任务服务端后台自己慢慢跑就行,客户端不会关心。

  1. 开启异步调用,在启动类增加@EnableAsync使异步调用@Async注解生效
@EnableAsync
public class DbCompareApplication {
    public static void main(String[] args) {
        SpringApplication.run(DbCompareApplication.class, args);
    }
}
  1. 在需要异步调用的方法,增加注解@Async
@Component
public class TestSleep {
    @Async
    public void sleep(){
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("sleep");;
    }
}
  1. Controller调用异步方法
@RestController
public class TaskController {
    @Autowired
    TestSleep testSleep;
    @GetMapping("/test")
    public String test(){
        testSleep.sleep();
        return "ok";
    }
}
  1. 效果
  • 如果不加@Async注解,客户端的调用,需要10秒才能返回结果;
  • 加了@Async注解,客户端的调用立马返回结果,调用的方法在服务端后台运行.
  1. 注意事项:部分情况下@Async注解失效
  • 调用同一个类下注有@Async异步方法
  • 调用的是静态(static)方法
  • 调用(private)私有化方法