异步调用无需等待,方法相当于子线程,后台执行,主线程执行完成,子线程开始执行。
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 @EnableAsync public 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的方法,注解是不会生效的!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
同步调用异步方法最安全的方法是什么?
我正试图从同步方法运行异步方法。但是我不能等待异步方法,因为我在同步方法中。我一定不理解TPL,因为这是我第一次使用它。 每个方法都需要前一个方法来完成,因为第一个方法的数据用于第二个方法。 Await运算符只能在异步方法中使用。考虑用'async'修饰符标记此方法,并将其返回类型更改为'task' 但是,如果我使用async修饰符,这将是一个异步操作。因此,如果我对的调用没有使用await运算符
我可能还不够清楚--情况是,我的现有代码不支持异步,我希望使用新的库,如System.net.http和只支持异步方法的AWS SDK。因此,我需要弥补这一差距,并能够拥有可以同步调用的代码,然后可以在其他地方调用异步方法。 我读了很多书,有很多次有人问这个问题,也有人回答这个问题。 从非异步方法调用异步方法
playframework 2.2(java 7) 我有REST api,在那里接收一些json,用json数据我正在做一些事情,最后我发送电子邮件并返回结果。发送电子邮件有点慢,所以我希望在处理json后在其他线程中调用此电子邮件方法,或者我希望执行异步并返回结果,而不必等待电子邮件方法的执行。 如何在控制器中实现和调用异步方法? 下面是代码示例 编辑: 不确定它是否好,但有效。
本文向大家介绍SpringBoot异步任务使用方法详解,包括了SpringBoot异步任务使用方法详解的使用技巧和注意事项,需要的朋友参考一下 步骤,如图所示: 1.添加异步任务业务类 2.添加测试控制器 3.添加启动类 4.右键项目Run As启动,访问url 结果: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。