使用场景

在实际项目中,一个接口如果需要处理很多数据,如果是同步执行,通过网络请求接口可能会出现请求超时。这时候就需要使用异步执行处理了。

使用经验

  • 代码

    • 异步服务类

      @Service // Spring容器托管
      @EnableAsync // *开启异步,有这个注解的类Spring才会进行异步处理
      public class AsyncBizImpl implements AsyncBiz{ @Autowired
      private AsyncDao asynDao; @Async // *这个是需要异步执行的函数
      @Override
      public void async() {
      transactionMethod();
      } @Override
      public void setStateBeforeAsync() {
      asynDao.setState();
      } @Transactional // 将需要加事务的封装到另一个函数
      private void transactionMethod() {
      // 如果需要回滚外层调用者的数据库操作,才需要捕捉异常
      try {
      asynDao.dbOperation(); // 数据库操作
      } catch (Exception e) { // 捕捉异常进行外层调用者手动回滚
      asynDao.releaseState(); // 调用者数据库操作的反向操作
      throw new RuntimeException("错误信息"); // 抛异常给@Transactional回滚数据库操作
      }
      }
      }
    • 外层调用类

      @Service // Spring容器托管
      public class AsyncServiceImpl implements AsyncService{ @Autowired
      private AsyncBiz asyncBiz; @Override
      public boolean async() {
      asyncBiz.setStateBeforeAsync(); // 设置标识
      asyncBiz.async(); // 异步方法
      return true;
      } }
  • 总结

    • 需要被Spring托管

      • @Service等
    • 类需要开启异步功能

      • @EnableAsync
    • 执行异步的方法

      • 返回值

        • void
        • Future
      • 非静态类
      • 添加注解@Async
      • 需要事务的语句封装成方法
        • 对应方法添加@Transactional
      • 如果需要回滚外层的数据库操作
        • 需要捕捉异常,执行反向操作的函数
        • 捕捉异常后要重新抛出新的异常,否则与@Transactional冲突

Spring使用@Async实现异步的更多相关文章

  1. spring使用@Async注解异步处理

    1. 何为异步调用?在解释异步调用之前,我们先来看同步调用的定义:同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果. 异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行 ...

  2. 使用Spring的@Async创建异步方法

    使用Spring的@Async创建异步方法 在开发系统的过程中,通常会考虑到系统的性能问题,提升系统性能的一个重要思想就是“串行”改“并行”.说起“并行”自然离不开“异步”,今天我们就来聊聊如何使用S ...

  3. Spring中@Async注解实现“方法”的异步调用

    原文:http://www.cnblogs.com/zhengbin/p/6104502.html 简单介绍: Spring为任务调度与异步方法执行提供了注解支持.通过在方法上设置@Async注解,可 ...

  4. Spring Boot @Async 异步任务执行

    1.任务执行和调度 Spring用TaskExecutor和TaskScheduler接口提供了异步执行和调度任务的抽象. Spring的TaskExecutor和java.util.concurre ...

  5. spring boot中使用@Async实现异步调用任务

    本篇文章主要介绍了spring boot中使用@Async实现异步调用任务,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 什么是“异步调用”? “异步调用”对应的是“同步 ...

  6. spring boot 学习(十一)使用@Async实现异步调用

    使用@Async实现异步调用 什么是”异步调用”与”同步调用” “同步调用”就是程序按照一定的顺序依次执行,,每一行程序代码必须等上一行代码执行完毕才能执行:”异步调用”则是只要上一行代码执行,无需等 ...

  7. Spring @Async开启异步任务

    1. 开启异步 @SpringBootApplication @EnableAsync //开启异步任务 public class Application { @Bean(name="pro ...

  8. Spring Boot使用@Async实现异步调用

    原文:http://blog.csdn.net/a286352250/article/details/53157822 项目GitHub地址 : https://github.com/FrameRes ...

  9. Spring @Scheduled @Async联合实现调度任务(2017.11.28更新)

    定时任务之前一直用的是quartz之类,但是注意到Spring中其实也提供了一种简单的调度注释@Scheduled,也就想尝一下鲜.. 代码示意如下: @Component @EnableSchedu ...

随机推荐

  1. RPC 框架 Dubbo 从理解到使用(一)

    技术架构演变 单一应用架构 通俗地讲,"单体应用(monolith application)"就是将应用程序的所有功能都打包成一个独立的单元.当网站流量很小时,只需一个应用,将所有 ...

  2. Ncdu强大的磁盘查看命令

    简介 项目地址: https://dev.yorhel.nl/ncdu Ncdu (NCurses Disk Usage) 是一个基于 Ncurses 库的 du 命令的界面.它通过大家熟知的 du ...

  3. Microsoft Remote Desktop 10.3.12 下载

    下载地址:https://mac.softpedia.com/

  4. 弱校验之@NotNull@NotEmpty@NotBlank

    @NotNull 适用于非空判断 The annotated element must not be {@code null}. CharSequence, Collection, Map 和 Arr ...

  5. python open函数初习

    open("路径","打开方式")  打开方式:'r'只读模式,‘w’写模式,‘a’追加模式 ‘b’二进制模式,‘+’读/写模式.例: fh=open(&quo ...

  6. Shell编程—结构化命令(2)

    1for命令 for命令的基本格式: for var in list do commands done 在list参数中,你需要提供迭代中要用到的一系列值. 1.1读取列表中的值 例子: $ vim ...

  7. 网站seo优化有什么优缺点

    http://www.wocaoseo.com/thread-94-1-1.html       seo是什么?这个可能是刚刚知道网络营销或搜索引擎营销的朋友们问的话,笔者在这里装一下,呵呵.说真的现 ...

  8. python3+pyqt5+opencv3简单使用

    python3+pyqt5+opencv3简单使用(转载) 关于python3下搭建pyqt5(pycharm)参考这条链接. 对于pyqt的使用个人比较建议ui设计与逻辑功能分开开发. 下面介绍下简 ...

  9. photonServer学习之连接数据库

    string connectStr = "server=127.0.0.1;port=3306;database=database;user=root;pwd=root";//连接 ...

  10. JetBrain破解

    https://blog.csdn.net/u014044812/article/details/78727496 https://jetlicense.nss.im/ https://zhile.i ...