时间:2021-05-20
异步调用无需等待,方法相当于子线程,后台执行,主线程执行完成,子线程开始执行。
SpringBoot 开启异步执行仅需两步:
方法上加 @Async
@Override @Async @Transactional(rollbackFor = Exception.class) public Integer init(DatePojo datePojo){ //xxxxxxxxxxx 业务略 xxxxxxx log.info(" 起止日期为 : {} , {} ", start, end); //xxxxxxxxxxxxx 业务略 xxxxxxx log.info(" ------------------ 【能源入库完成】------------------ {}", nyList); log.info(" ------------------ 【新能源初始化结束】------------------"); return 0; }main 方法 开启 @EnableAsync
@SpringBootApplication@EnableAsyncpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}controller
@PostMapping("/ny") public ReturnMessage ny( @RequestBody DatePojo datePojo, BindingResult result) { log.info(" 【 能源初始化接口调用开始 】"); //业务类 Integer data = xstjJdcNyService.init(datePojo); log.info(" 【 能源初始化接口调用结束 】"); return new ReturnMessage(CodeMsgEnum.OK.getCode(), CodeMsgEnum.OK.getMsg(), data); }执行结果
可以看到 controller 先执行完成然后返回状态,接着 方法才开始执行。
错误
Spring之AOP奇葩报错:Null return value from advice does not match primitive return type for
原因是返回为null 基本类型要用包装类型。
总结
1 使用了@Async的方法,会被当成是一个子线程,所有整个sendSms方法,会在主线程执行完了之后执行
2 同一个类中,一个方法调用另外一个有@Async的方法,注解是不会生效的!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.异步调用异步调用就是在不阻塞主线程的情况下执行高耗时方法2.常规异步通过开启新线程实现3.在Springboot中启用异步方法需要4个注解1.@Enable
前言在之前的SpringBoot基础教程系列中,已经通过《SpringBoot中使用@Async实现异步调用》一文介绍过如何使用@Async注解来实现异步调用了
1、关于高并发的几个重要概念1.1同步和异步首先这里说的同步和异步是指函数/方法调用方面。很明显,同步调用会等待方法的返回,异步调用会瞬间返回,但是异步调用瞬间
使用@Async实现异步调用什么是”异步调用”与”同步调用”“同步调用”就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码执行完毕才能执行;”异步
异步调用在解释异步调用之前,我们先来看同步调用的定义;同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。异步调用则是只是发送了调用的指令,调用者无