本篇文章小编给大家分享一下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 end = System.currentTimeMillis(); System.out.println("任务1耗时:" + (end - begin)); } public void task2() throws InterruptedException { long begin = System.currentTimeMillis(); Thread.sleep(2000); long end = System.currentTimeMillis(); System.out.println("任务2耗时:" + (end - begin)); } public void task3() throws InterruptedException { long begin = System.currentTimeMillis(); Thread.sleep(3000); long end = System.currentTimeMillis(); System.out.println("任务3耗时:" + (end - begin)); } //测试拿到返回结果 public Futuretask4() throws InterruptedException { long begin = System.currentTimeMillis(); Thread.sleep(1000); long end = System.currentTimeMillis(); System.out.println("任务4耗时:" + (end - begin)); return new AsyncResult ("任务4"); } public Future task5() throws InterruptedException { long begin = System.currentTimeMillis(); Thread.sleep(2000); long end = System.currentTimeMillis(); System.out.println("任务5耗时:" + (end - begin)); return new AsyncResult ("任务5"); } public Future task6() throws InterruptedException { long begin = System.currentTimeMillis(); Thread.sleep(3000); long end = System.currentTimeMillis(); System.out.println("任务6耗时:" + (end - begin)); 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 test() throws InterruptedException, ExecutionException { long begin = System.currentTimeMillis(); //asyncTask.task1(); //asyncTask.task2(); //asyncTask.task3(); Futureresult1 = asyncTask.task4(); Future result2 = asyncTask.task5(); Future result3 = asyncTask.task6(); System.out.println("返回结果:" + result1.get() + "," + result2.get() + "," + result3.get()); for(;;) { if(result1.isDone() && result2.isDone() && result3.isDone()) { break; } } long end = System.currentTimeMillis(); long total = end - begin; System.out.println("总耗时:" + total); return "总耗时:" + total; } }
3.添加启动类
package top.ytheng.demo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication //等于下面3个 //@SpringBootConfiguration //@EnableAutoConfiguration //@ComponentScan //拦截器用到 @ServletComponentScan //MyBatis用到 @MapperScan("top.ytheng.demo.mapper") //定时使用(开启定时任务) @EnableScheduling //开启异步任务 @EnableAsync public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
4.右键项目Run As启动,访问url
http://localhost:8080/api/v1/async/test
结果:
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整