Springboot 任务管理
关于web开发的任务
异步任务(无返回值异步任务调用)
web应用开发中,大多数情况都是通过同步方式完成数据交互处理:但是当处理与第三方系统的交互时候容易造成相应迟缓的情况,之前大部分都是使用多线程完成此任务,除此之外还可以使用异步调用的方式解决这个问题.根据异步处理方式的不同,可以将异步任务的调用分为无返回值异步任务调用和有返回值异步任务调用.
- springboot 项目创建
使用spring initialzr方式创建,加入web依赖,spring框架提供了对异步任务的支持,springboot框架继承了这一异步任务功能.在springboot整合异步任务只需要在项目中引入web相关依赖即可. - 编写异步调用方法
//使用@Asyn注解将sendMsg()方法标注为异步方法,模拟发送短信验证码
@Service
public class MyAsynService {
@Async
public void sendMsg() throws Exception {
System.out.println("调用短消息验证业务的方法---");
Long startTime = System.currentTimeMillis();
Thread.sleep(5000);
long endTime = System.currentTimeMillis();
System.out.println("短信业务执行完成耗时:" + (endTime - startTime));
}
}
- 开启基于注解的异步任务支持
使用@EnableAsync注解开启基于注解的任务支持,一般添加在项目启动类上
@SpringBootApplication
@EnableAsync //开启基于注解的异步任务支持
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 编写控制层业务调用方法
在此模拟编写用户短信发送的处理方法
@RestController
public class MyAsynController {
@Autowired
private MyAsynService myAsynService;
@GetMapping("/sendMsg")
public String sendMsg() throws Exception {
long startTime = System.currentTimeMillis();
myAsynService.sendMsg();
long endTime = System.currentTimeMillis();
System.out.println("主流程耗时:" + (endTime - startTime));
return "success";
}
}
5.异步任务效果测试
启动项目在浏览器输入:http://localhost:8080/sendMsg, 测试异步任务请求,此时会发现浏览器上会快速响应"success",同时,控制台会输出下图.
从展示结果看出,执行sendMsg()方法并调用方法处理短信业务时,在很短时间内完成主流程的执行,并向页面响应流程结果,而主流程打印出方法之前调用的异步方法经过一段时间后才执行完毕.因此,从执行结果可以发现,案例无返回结果值的异步调用成功.