怎么在SpringBoot中实现一个异步任务

  介绍

怎么在SpringBoot中实现一个异步任务?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

步骤,如图所示:

怎么在SpringBoot中实现一个异步任务

1。添加异步任务业务类

package  top.ytheng.demo.task;      import  java.util.concurrent.Future;      import  org.springframework.scheduling.annotation.Async;   import  org.springframework.scheduling.annotation.AsyncResult;   import  org.springframework.stereotype.Component;//异步任务业务类   @ component//标记此类是异步类,也可在方法中标记//不加,则类里面的方法为同步执行   @Async   public  class  AsyncTask  {      public 才能;void  task1 (), throws  InterruptedException  {   ,,,long  begin =, System.currentTimeMillis ();   ,,,thread . sleep (1000);   ,,,long 最终获得=,System.currentTimeMillis ();   ,,,System.out.println(“任务1耗时:“,+,(最终获得;安康;开始);   ,,}   ,,   public 才能;void  task2 (), throws  InterruptedException  {   ,,,long  begin =, System.currentTimeMillis ();   ,,,thread . sleep (2000);   ,,,long 最终获得=,System.currentTimeMillis ();   ,,,System.out.println(“任务2耗时:“,+,(最终获得;安康;开始);   ,,}   ,,   public 才能;void  task3 (), throws  InterruptedException  {   ,,,long  begin =, System.currentTimeMillis ();   ,,,thread . sleep (3000);   ,,,long 最终获得=,System.currentTimeMillis ();   ,,,System.out.println(“任务3耗时:“,+,(最终获得;安康;开始);   ,,}   ,,//才能测试拿到返回结果   public 才能;Future< String>, task4 (), throws  InterruptedException  {   ,,,long  begin =, System.currentTimeMillis ();   ,,,thread . sleep (1000);   ,,,long 最终获得=,System.currentTimeMillis ();   ,,,System.out.println(“任务4耗时:“,+,(最终获得;安康;开始);   ,,,return  new  AsyncResult(“任务4“);   ,,}   ,,   public 才能;Future< String>, task5 (), throws  InterruptedException  {   ,,,long  begin =, System.currentTimeMillis ();   ,,,thread . sleep (2000);   ,,,long 最终获得=,System.currentTimeMillis ();   ,,,System.out.println(“任务5耗时:“,+,(最终获得;安康;开始);   ,,,return  new  AsyncResult(“任务5“);   ,,}   ,,   public 才能;Future< String>, task6 (), throws  InterruptedException  {   ,,,long  begin =, System.currentTimeMillis ();   ,,,thread . sleep (3000);   ,,,long 最终获得=,System.currentTimeMillis ();   ,,,System.out.println(“任务6耗时:“,+,(最终获得;安康;开始);   ,,,return  new  AsyncResult(“任务6“);   ,,}   }

2。添加测试控制器

package  top.ytheng.demo.controller;      import  java.util.concurrent.ExecutionException;   import  java.util.concurrent.Future;      import  org.springframework.beans.factory.annotation.Autowired;   import  org.springframework.web.bind.annotation.GetMapping;   import  org.springframework.web.bind.annotation.RequestMapping;   import  org.springframework.web.bind.annotation.RestController;      import  top.ytheng.demo.task.AsyncTask;      @RestController   @RequestMapping (“api/v1/async")   public  class  TaskController  {      @ autowired才能   private 才能;AsyncTask  asyncTask;   ,,   @GetMapping才能(“/test")   public 才能;Object 测试(),throws  InterruptedException, ExecutionException  {   ,,,long  begin =, System.currentTimeMillis ();   ,,,//asyncTask.task1 ();   ,,,//asyncTask.task2 ();   ,,,//asyncTask.task3 ();   ,,,Future, result1 =, asyncTask.task4 ();   ,,,Future, result2 =, asyncTask.task5 ();   ,,,Future, result3 =, asyncTask.task6 ();   ,,,System.out.println(“返回结果:“,+,result1.get (), +,,,,, +, result2.get (), +,,,,, +, result3.get ());   ,,,(,),{   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在SpringBoot中实现一个异步任务