SpringBoot异步任务使用方法详解
步骤,如图所示:
1.添加异步任务业务类
packagetop.ytheng.demo.task; importjava.util.concurrent.Future; importorg.springframework.scheduling.annotation.Async; importorg.springframework.scheduling.annotation.AsyncResult; importorg.springframework.stereotype.Component; //异步任务业务类 @Component //标记此类是异步类,也可在方法中标记 //不加,则类里面的方法为同步执行 @Async publicclassAsyncTask{ publicvoidtask1()throwsInterruptedException{ longbegin=System.currentTimeMillis(); Thread.sleep(1000); longend=System.currentTimeMillis(); System.out.println("任务1耗时:"+(end-begin)); } publicvoidtask2()throwsInterruptedException{ longbegin=System.currentTimeMillis(); Thread.sleep(2000); longend=System.currentTimeMillis(); System.out.println("任务2耗时:"+(end-begin)); } publicvoidtask3()throwsInterruptedException{ longbegin=System.currentTimeMillis(); Thread.sleep(3000); longend=System.currentTimeMillis(); System.out.println("任务3耗时:"+(end-begin)); } //测试拿到返回结果 publicFuturetask4()throwsInterruptedException{ longbegin=System.currentTimeMillis(); Thread.sleep(1000); longend=System.currentTimeMillis(); System.out.println("任务4耗时:"+(end-begin)); returnnewAsyncResult ("任务4"); } publicFuture task5()throwsInterruptedException{ longbegin=System.currentTimeMillis(); Thread.sleep(2000); longend=System.currentTimeMillis(); System.out.println("任务5耗时:"+(end-begin)); returnnewAsyncResult ("任务5"); } publicFuture task6()throwsInterruptedException{ longbegin=System.currentTimeMillis(); Thread.sleep(3000); longend=System.currentTimeMillis(); System.out.println("任务6耗时:"+(end-begin)); returnnewAsyncResult ("任务6"); } }
2.添加测试控制器
packagetop.ytheng.demo.controller; importjava.util.concurrent.ExecutionException; importjava.util.concurrent.Future; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.web.bind.annotation.GetMapping; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RestController; importtop.ytheng.demo.task.AsyncTask; @RestController @RequestMapping("api/v1/async") publicclassTaskController{ @Autowired privateAsyncTaskasyncTask; @GetMapping("/test") publicObjecttest()throwsInterruptedException,ExecutionException{ longbegin=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; } } longend=System.currentTimeMillis(); longtotal=end-begin; System.out.println("总耗时:"+total); return"总耗时:"+total; } }
3.添加启动类
packagetop.ytheng.demo; importorg.mybatis.spring.annotation.MapperScan; importorg.springframework.scheduling.annotation.EnableAsync; importorg.springframework.scheduling.annotation.EnableScheduling; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication//等于下面3个 //@SpringBootConfiguration //@EnableAutoConfiguration //@ComponentScan //拦截器用到 @ServletComponentScan //MyBatis用到 @MapperScan("top.ytheng.demo.mapper") //定时使用(开启定时任务) @EnableScheduling //开启异步任务 @EnableAsync publicclassDemoApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(DemoApplication.class,args); } }
4.右键项目RunAs启动,访问url
http://localhost:8080/api/v1/async/test
结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。