介绍
怎么在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中实现一个异步任务