SpringBoot开启异步调用方法

异步调用无需等待,方法相当于子线程,后台执行,主线程执行完成,子线程开始执行。
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的方法,注解是不会生效的!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解SpringBoot中异步请求和异步调用(看完这一篇就够了)

    一.SpringBoot中异步请求的使用 1.异步请求与同步请求 特点: 可以先释放容器分配给请求的线程与相关资源,减轻系统负担,释放了容器所分配线程的请求,其响应将被延后,可以在耗时处理完成(例如长时间的运算)时再对客户端进行响应.一句话:增加了服务器对客户端请求的吞吐量(实际生产上我们用的比较少,如果并发请求量很大的情况下,我们会通过nginx把请求负载到集群服务的各个节点上来分摊请求压力,当然还可以通过消息队列来做请求的缓冲). 2.异步请求的实现 方式一:Servlet方式实现异步请求

  • SpringBoot实现定时任务和异步调用

    本文实例为大家分享了SpringBoot实现定时任务和异步调用的具体代码,供大家参考,具体内容如下 环境: jdk1.8:spring boot2.0.2:Maven3.3 摘要说明: 定时任务:定时任务是业务场景中经常出现的一种情况如:定时发送邮件,短信.定时统计监控数据.定时对账等 异步调用:一个都买流程可能包括下单.发货通知.短信推送.消息推送等,其实除了下单这个主要程序是主程序,其他子程序可以同时进行且不影响主程序的运行,这个时候就可以使用异步调用来调用这些子程序: 步骤: 1.定时任务

  • springboot 异步调用的实现方法

    说异步调用前,我们说说它对应的同步调用.通常开发过程中,一般上我们都是同步调用,即:程序按定义的顺序依次执行的过程,每一行代码执行过程必须等待上一行代码执行完毕后才执行.而异步调用指:程序在执行时,无需等待执行的返回值可继续执行后面的代码.显而易见,同步有依赖相关性,而异步没有,所以异步可并发执行,可提高执行效率,在相同的时间做更多的事情. 同步 程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 异步 程

  • SpringBoot开启异步调用方法

    异步调用无需等待,方法相当于子线程,后台执行,主线程执行完成,子线程开始执行. SpringBoot 开启异步执行仅需两步: 方法上加 @Async @Override @Async @Transactional(rollbackFor = Exception.class) public Integer init(DatePojo datePojo){ //xxxxxxxxxxx 业务略 xxxxxxx log.info(" 起止日期为 : {} , {} ", start, end)

  • SpringBoot异步调用方法实现场景代码实例

    一.背景 项目中肯定会遇到异步调用其他方法的场景,比如有个计算过程,需要计算很多个指标的值,但是每个指标计算的效率快慢不同,如果采用同步执行的方式,运行这一个过程的时间是计算所有指标的时间之和.比如: 方法A:计算指标x,指标y,指标z的值,其中计算指标x需要1s,计算指标y需要2s,指标z需要3s.最终执行完方法A就是5s. 现在用异步的方式优化一下 方法A异步调用方法B,方法C,方法D,方法B,方法C,方法D分别计算指标x,指标y,指标z的值,那么最终执行完方法A的时间则是3s. 还有一种用

  • SpringBoot异步调用方法并接收返回值

    项目中肯定会遇到异步调用其他方法的场景,比如有个计算过程,需要计算很多个指标的值,但是每个指标计算的效率快慢不同,如果采用同步执行的方式,运行这一个过程的时间是计算所有指标的时间之和.比如: 方法A:计算指标x,指标y,指标z的值,其中计算指标x需要1s,计算指标y需要2s,指标z需要3s.最终执行完方法A就是5s. 现在用异步的方式优化一下 方法A异步调用方法B,方法C,方法D,方法B,方法C,方法D分别计算指标x,指标y,指标z的值,那么最终执行完方法A的时间则是3s. 步骤1:配置线程池,

  • springboot实现异步调用@Async的示例

    在后端开发中经常遇到一些耗时或者第三方系统调用的情况,我们知道Java程序一般的执行流程是顺序执行(不考虑多线程并发的情况),但是顺序执行的效率肯定是无法达到我们的预期的,这时就期望可以并行执行,常规的做法是使用多线程或线程池,需要额外编写代码实现.在spring3.0后引入了@Async注解,使用该注解可以达到线程池的执行效果,而且在开发上非常简单. 一.概述 springboot是基于spring框架的,在springboot环境下演示@Async注解的使用方式.先看下该注解的定义, @Ta

  • Spring中的使用@Async异步调用方法

    目录 使用@Async异步调用方法 Async简介 给Spring的TaskExecutor去完成 本次记录Async使用场景 异步请求与异步调用的区别 异步请求的实现 SpringBoot中异步调用的使用 使用@Async异步调用方法 Async简介 异步方法调用使用场景:处理日志.发送邮件.短信...... spring中提供了@Async来实现异步方法. @Async修饰类,则该类所有方法都是异步的,@Async修饰方法,则该方法是异步的. 被修饰的方法在被调用时,会在一个新的线程中执行.

  • python使用multiprocessing模块实现带回调函数的异步调用方法

    本文实例讲述了python使用multiprocessing模块实现带回调函数的异步调用方法.分享给大家供大家参考.具体分析如下: multipressing模块是python 2.6版本加入的,通过这个模块可以轻松实现异步调用 from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': pool = Pool(processes=1) # Start a worker processes. r

  • php 异步调用方法实现示例

    php 异步调用方法 客户端与服务器端是通过HTTP协议进行连接通讯,客户端发起请求,服务器端接收到请求后执行处理,并返回处理结果. 有时服务器需要执行很耗时的操作,这个操作的结果并不需要返回给客户端.但因为php是同步执行的,所以客户端需要等待服务处理完才可以进行下一步. 因此对于耗时的操作适合异步执行,服务器接收到请求后,处理完客户端需要的数据就返回,再异步在服务器执行耗时的操作. 1.使用Ajax 与 img 标记 原理,服务器返回的html中插入Ajax 代码或 img 标记,img的s

  • 浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法

    在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们发现程序执行完后并没有获取到我们想要的值,这时很有可能是因为你用的是ajax的异步调用async:true(默认情况),如: 复制代码 代码如下: function ManageCommentText(text) {var result = text;$.ajax({data: "get",url: "GetComments.aspx",data: "typ

  • spring boot 使用@Async实现异步调用方法

    使用@Async实现异步调用 什么是"异步调用"与"同步调用" "同步调用"就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码执行完毕才能执行:"异步调用"则是只要上一行代码执行,无需等待结果的返回就开始执行本身任务. 通常情况下,"同步调用"执行程序所花费的时间比较多,执行效率比较差.所以,在代码本身不存在依赖关系的话,我们可以考虑通过"异步调用"的方式来并发执行. &q

  • PHP实现异步调用方法研究与分享

    这样就出现了一个问题,一个客户端的相应服务端可能执行1秒也有可能执行1分钟,这样浏览器就会一直处于等待状态,如果程序执行缓慢,用户可能就没耐心关掉了浏览器. 而有的时候我们不需要关心程序执行的结果,没有必要这样浪费时间和耐心等待,那我们就要想出办法让程序不收等待在后台静默执行. 比如现在有一个场景,给1000个用户发送一封推荐邮件,用户输入或者导入邮件账号了提交服务器执行发送. 复制代码 代码如下: <?php $count=count($emailarr); for($i=0;$i<$cou

随机推荐