Springboot @Async 异步任务调用

2023-11-16

异步调用的概念
异步调用相对于同步调用而言,通常的方法都是程序按照顺序来执行的,程序的每一步都需要等到上一步执行完成之后才能继续往下执行;而异步调用则无需等待,它可以在不阻塞主线程的情况下执行高耗时方法

如何实现异步调用
在不使用SpringBoot的时候我们通常使用多线程的方式来实现异步调用,对于一个web项目的话就需要使用线程池来创建多线程进行调用,而SpringBoot提供了很方便的@Async注解来实现异步方法

需要引入的jar包:

<parent>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-parent</artifactId>  
    <version>1.5.3.RELEASE</version>  
</parent>  
<dependencies>  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-web</artifactId>  
    </dependency>  
</dependencies>  


需要使用到的注解:
@Async:用于指定注解的方式为异步调用的方法 
@EnableAsync:用于开启异步调用机制,注解在有@Config注解修饰的类上

需要注意的问题一:异步方法的定义位置问题
最好将异步调用的方法单独放在一个@Component类中,或者说不要将异步调用方法写在@Controller中,否则将无法进行调用,因为SpringBoot使用@Transaction需要经过事务拦截器,只有通过了该事务拦截器的方法才能被加入Spring的事务管理器中,而在同一个类中的一个方法调用另一个方法只会经过一次事务拦截器,所以如果是后面的方法使用了事务注解将不会生效,在这里异步调用也是同样的道理

参考文献
spring事务@Transactional在同一个类中的方法调用不生效 
SpringBoot集成篇(二) 异步调用Async

需要注意的问题二:异步方法的事务调用问题
在@Async注解的方法上再使用@Transaction注解是无效的,在@Async注解的方法中调用Service层的事务方法是有效的

需要注意的问题三:异步方法必须是实例的
因为静态方法不能被override重写,因为@Async异步方法的实现原理是通过注入一个代理类到Bean中,该代理类集成这个Bean并且需要重写这个异步方法,所以需要是实例方法

参考文献
Springboot @Async 异步方法

代码示例
可以参考该文章里面的SpringBoot集成篇(二) 异步调用Async


--------------------- 
作者:19年,重新开始写 
来源:CSDN 
原文:https://blog.csdn.net/qq_27905183/article/details/80294497 
版权声明:本文为博主原创文章,转载请附上博文链接!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot @Async 异步任务调用 的相关文章

  • 垃圾收集器如何在幕后工作来收集死对象?

    我正在阅读有关垃圾收集的内容 众所周知 垃圾收集会收集死亡对象并回收内存 我的问题是 Collector 如何知道任何对象已死亡 它使用什么数据结构来跟踪活动对象 我正在研究这个问题 我发现GC实际上会跟踪活动对象 并标记它们 每个未标记的
  • Jframe 内有 2 个 Jdialogs 的 setModal 问题

    当我设置第一个选项时 我遇到了问题JDialog模态 第二个非模态 这是我正在尝试实现的功能 单击 测试对话框 按钮 一个JDialog有名字自定义对话框 主要的将会打开 如果单击 是 选项自定义对话框主 其他JDialog named 自
  • 从 MATLAB 调用 Java?

    我想要Matlab程序调用java文件 最好有一个例子 需要考虑三种情况 Java 内置库 也就是说 任何描述的here http docs oracle com javase 6 docs api 这些项目可以直接调用 例如 map ja
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • Runtime.exec 处理包含多个空格的参数

    我怎样才能进行以下运行 public class ExecTest public static void main String args try Notice the multiple spaces in the argument Str
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • 将非 Android 项目添加到 Android 项目

    我在 Eclipse 中有三个项目 Base Server 和 AndroidClient Base和Server是Java 1 7项目 而AndroidClient显然是一个android项目 基础项目具有在服务器和 Android 客户
  • 如何在 ant 中为 junit 测试设置 file.encoding?

    我还没有完全完成file encoding 和 ant https stackoverflow com questions 1339352 how do i set dfile encoding within ants build xml
  • 如何在.NET中使用java.util.zip.Deflater解压缩放气流?

    之后我有一个转储java util zip Deflater 可以确认它是有效的 因为 Java 的Inflater打开它很好 并且需要在 NET中打开它 byte content ReadSample sampleName var inp
  • 如何将 HTML 链接放入电子邮件正文中?

    我有一个可以发送邮件的应用程序 用 Java 实现 我想在邮件中放置一个 HTML 链接 但该链接显示为普通字母 而不是 HTML 链接 我怎样才能将 HTML 链接放入字符串中 我需要特殊字符吗 太感谢了 Update 大家好你们好 感谢
  • 如何在JPanel中设置背景图片

    你好 我使用 JPanel 作为我的框架的容器 然后我真的想在我的面板中使用背景图片 我真的需要帮助 这是我到目前为止的代码 这是更新 请检查这里是我的代码 import java awt import javax swing import
  • 如何区分从 Saxon XPathSelector 返回的属性节点和元素节点

    给定 XML
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • 在java中以原子方式获取多个锁

    我有以下代码 注意 为了可读性 我尽可能简化了代码 如果我忘记了任何关键部分 请告诉我 public class User private Relations relations public User relations new Rela
  • java 中的蓝牙 (J2SE)

    我是蓝牙新手 这就是我想做的事情 我想获取连接到我的电脑上的蓝牙的设备信息并将该信息写入文件中 我应该使用哪个 api 以及如何实现 我遇到了 bluecove 但经过几次搜索 我发现 bluecove 不能在 64 位电脑上运行 我现在应
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • Java RMI - 客户端超时

    我正在使用 Java RMI 构建分布式系统 它必须支持服务器丢失 如果我的客户端使用 RMI 连接到服务器 如果该服务器出现故障 例如电缆问题 我的客户端应该会收到异常 以便它可以连接到其他服务器 但是当服务器出现故障时 我的客户端什么也
  • 如何更改 Spring OAuth2 上的response_type

    这是我使用 Instagram 进行 OAuth2 登录的配置 instagram client clientId clientId clientSecret clientSeret accessTokenUri https api ins
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro
  • java'assert'和'if(){}else exit;'之间的区别

    java和java有什么区别assert and if else exit 我可以用吗if else exit代替assert 也许有点谷歌 您应该记住的主要事情是 if else 语句应该用于程序流程控制 而assert 关键字应该仅用于

随机推荐

  • 蓝桥杯冲击01 - 质数篇

    目录 前言 一 质数是什么 二 易错点 三 试除法判断是否为质数 四 质数常考三大模型 五 真题练手 前言 距离蓝桥杯还有一个月 高效复习蓝桥杯知识 质数相关的题目在蓝桥杯中经常出现 例如 2016年蓝桥杯省赛初赛第四题就是要求判断一个数是
  • 基于宽表的数据建模

    一 业务背景 1 1 数据建模现状 互联网企业往往存在多个产品线 每天源源不断产出大量数据 这些数据服务于数据分析师 业务上的产品经理 运营 数据开发人员等各角色 为了满足这些角色的各种需求 业界传统数仓常采用的是经典分层模型的数仓架构 从
  • 部分安卓端ncnn模型推理输出数据存在大量-nan和nan的问题

    原文issue链接 部分安卓端ncnn模型推理输出数据存在大量 nan的问题 Issue 3607 Tencent ncnn github com 问题描述 onnx ncnn模型在pc端推理输出结果正确且基本一致 在部分安卓设备上使用同一
  • 剑指 Offer 41. 数据流中的中位数(java+python)

    如何得到一个数据流中的中位数 如果从数据流中读出奇数个数值 那么中位数就是所有数值排序之后位于中间的数值 如果从数据流中读出偶数个数值 那么中位数就是所有数值排序之后中间两个数的平均值 例如 2 3 4 的中位数是 3 2 3 的中位数是
  • 微信小程序内添加腾讯地图 导航

    1 微信小程序 设置 第三方设置 插件管理 添加插件 如果搜索不到腾讯位置服务路线规划插件 可搜索如下地址直接添加腾讯位置服务路线规划 小程序插件 微信公众平台 问题 提示添加失败 项目主体不符的 可以通过 服务 微信服务市场 搜索 腾讯位
  • Python3 sorted自定义排序

    Python3的sorted函数具有key参数 可以进行自定义的排序 但并不是直接将自定义比较函数赋给key 这一点和C 是不一样的 在python3中 需要import functools来传递比较函数 注意 在Python3中 自定义比
  • hibernate之关于1+N的问题

    Hibernate 之关于1 N的问题 1 N问题 也有人叫做N 1问题 至今未统一 在这里我会告诉大家我为什么称之为1 N问题 什么情况下会产生1 N问题 在实际的项目开发中 我们配置的一对多 或者是多对一 在查询的时候会产生一种现象 例
  • Qt Http请求,post和get的两种方式

    今天我们介绍一下QT的http请求 这里有post和get两种方式 一 post请求方式 参数分为网址和具体请求值两个部分 有时候还需要设置头信息 看具体情况定 1 void MainWindow sendPostRequest 2 3 Q
  • 防止SQL注入

    SQL注入是指攻击者通过在输入的数据中注入恶意的SQL代码 以获取非法访问 窃取敏感信息等操作 以下是一些防止SQL注入的方法 使用参数化查询 使用参数化查询可以防止SQL注入攻击 参数化查询是指在执行查询时 将参数与查询语句分离 使得输入
  • java程序员微信群,欢迎准java行业人员加入,会一直更新

    微信群 请扫描二维码加入 本人在北京 主场北京 位置不限 仅限java行业交流 C C 以及python请另外加群 谢谢 欢迎准 java行业的进入 杜绝假冒程序员加入 精兵简政 群内与java无关私事请私聊 任何java的问题 欢迎讨论
  • NodeJS实现视频转码

    视频转码就是一个先解码 再编码的过程 从而将原来的视频转换成我们需要的视频 这种转换可能包括各式 mp4 avi flv等 分辨率 码率 帧率等 传统的视频转码中 很常用的工具是FFmpeg FFmpeg是一套可以用来记录 转换数字音频 视
  • UNIX环境高级编程 学习笔记 第十四章 高级I/O

    低速系统调用为可能使进程永远阻塞的一类系统调用 1 如果某些文件类型 管道 终端设备 网络设备 的数据不存在 读操作可能会使调用者永远阻塞 2 如果数据不能被某文件类型立即接受 管道中无空间 网络流控制 写操作可能会使调用者永远阻塞 3 在
  • 25行代码爬取英雄联盟手游英雄皮肤图片

    下面附源码 手游网址 英雄联盟手游官网 腾讯游戏 1 点击英雄 2 随机点一个英雄进去 3 按F12进入开发者模式 然后刷新 4 在搜索框里输入 js 找到skins js点击 我们可以发现所有现有的英雄皮肤信息都在里面 皮肤的图片链接以及
  • (Java基础知识) 几种Java任务调度比较

    前言 任务调度是指基于给定时间点 给定时间间隔或者给定执行次数自动执行任务 本文由浅入深介绍四种任务调度的 Java 实现 Timer ScheduledExecutor 开源工具包 Quartz 开源工具包 JCronTab 此外 为结合
  • pycharm配置镜像源

    一 背景 由于python再下载包时 下载时容易出现超时 等各种问题 原因 由于Python库的服务器都在国外 国内下载是速度普遍会很慢 所以需要配置一个镜像源来加快下载速度 二 解决方案 方案一 配置国内镜像源 清华 https pypi
  • 数据链路层的有那三个基本问题?为什么都必须加以解决?

    数据链路层的有那三个基本问题 为什么都必须加以解决 数据链路层的三个基本问题 封装成帧 透明传输 差错检测 封装成帧就是在一段数据前后分别添加首部和尾部 接收端以便从收到的比特流中识别帧的开始与结束 帧定界是分组交换的必然要求 透明传输避免
  • DCM与CCM

    1 什么是DCM断续工作模式 CCM连续工作模式 首先 反激开关电源的工作模式有三种 连续模式 临界模式 断续模式 如图为输出电流的波形图 由U L di dt 得到di U L dt 输入电压U和电感都是定值 所以电流的三角形式 在某一固
  • 数据分析之小白的爬虫入门教学

    数据是数据分析的基础 俗话说巧妇难为无米之炊 想要做好数据分析 必须先获得数据 在去年的这个时候 我一直想自己尝试写个爬虫 我买了一本python的书籍 但是因为种种原因 当时自己学习的速度很慢 一直到最近才慢慢的会写一些简单的爬虫 那这篇
  • python怎么求e的指数_分享Python中用于计算指数的exp()方法实例教程

    exp 方法返回指数x ex 语法 以下是exp 方法的语法 import math math exp x 注意 此函数是无法直接访问的 所以我们需要导入math模块 然后需要用math的静态对象来调用这个函数 参数x 这是一个数值表达式
  • Springboot @Async 异步任务调用

    异步调用的概念 异步调用相对于同步调用而言 通常的方法都是程序按照顺序来执行的 程序的每一步都需要等到上一步执行完成之后才能继续往下执行 而异步调用则无需等待 它可以在不阻塞主线程的情况下执行高耗时方法 如何实现异步调用 在不使用Sprin