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");
}
publicFuturetask5()throwsInterruptedException{
longbegin=System.currentTimeMillis();
Thread.sleep(2000);
longend=System.currentTimeMillis();
System.out.println("任务5耗时:"+(end-begin));
returnnewAsyncResult("任务5");
}
publicFuturetask6()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();
Futureresult2=asyncTask.task5();
Futureresult3=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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。