SpringBoot异步任务

有时我们需要处理一些复杂的业务

未使用异步任务的情况

controller

@RestController
public class AsyncController {
    @Autowired
    AsyncService asyncService;

    @RequestMapping("/hello")
    public String hello(){
        asyncService.hello();
        return "OK";
    }
}

service

@Service
public class AsyncService {
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("正在处理中....");
    }
}

未开启异步任务时,用户访问hello接口时,需要等待三秒才可以得到确认结果,造成一定程度的用户体验下降

##开启异步任务
在主启动类使用@EnableAsync开启异步任务

@SpringBootApplication
@EnableAsync
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

在service类中使用@Async注册为异步任务

@Service
@Async
public class AsyncService {
    public void hello(){
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("正在处理中....");
    }
}

开启异步任务后,用户请求当时即可收到返回结果,数据由服务端异步处理