sprigboot异步处理任务

2022-09-15 12:19:40

在开发工作中,开发者会经常遇到要使用异步处理的任务,例如发邮件,这个过程会耗费不少时间,如果正常执行,那么后台发送邮件时,前台就会造成响应不动,直到邮件发送完毕。所以一般都是使用多线程去处理这些问题,但是每次需要开启多线程太麻烦了,所以springboot就有了异步任务。在springBoot使用异步任务非常简单,只需要两步便能轻松使用。

前期准备工作:

1、准备一个service(AsynService),编写方法,模拟正在处理数据,例如使用线程休眠制造出同步时的等待效果。
@ServicepublicclassAsynService{publicvoidasyn(){System.out.println("任务正在处理中……");try{Thread.sleep(5000);//线程休眠5s}catch(InterruptedException e){
            e.printStackTrace();}System.out.println("任务处理完成");}}
2、准备一个controller(AsynController),编写方法,调用service中模拟正在处理数据的方法。
@ControllerpublicclassAsynController{@ResourceprivateAsynService asynService;@GetMapping("/asyn")@ResponseBodypublicStringasyn(){
        asynService.asyn();return"OK";}}
3、测试。此时,业务方法以及调用就好了,访问http://8080/asyn测试,页面就会出现5秒的加载等待,这就是同步时等待的情况。在这里插入图片描述

使用异步任务:原基础代码变,添加@EnableAsync@Async两个注解即可。

1、在启动类中添加@EnableAsync注解,开启异步任务功能
@EnableAsync//开启异步注解功能。这是重点!!!重点!!!重点!!!@SpringBootApplicationpublicclassCh08SpringbootTaskApplication{publicstaticvoidmain(String[] args){SpringApplication.run(Ch08SpringbootTaskApplication.class, args);}}
2、在需要开启异步的方法上添加@Async注解,告诉spring这是一个异步方法,springboot就会自己开启一个线程池进行调用,但是需要这个注解生效就必须在主程序上添加@EnableAsync注解。
@Async//告诉spring这是一个异步方法,只多了这一句代码publicvoidasyn(){System.out.println("任务正在处理中……");try{Thread.sleep(5000);}catch(InterruptedException e){
        e.printStackTrace();}System.out.println("任务处理完成");}
3、测试。重启,访问http://8080/asyn,网页几乎瞬间响应返回“OK”,后台还是在运行,直到处理完成。
  • 作者:X爪哇程序猿
  • 原文链接:https://blog.csdn.net/qq_44211323/article/details/117691020
    更新时间:2022-09-15 12:19:40