首页 > 其他分享 >Spring异步Async和事务Transactional注解

Spring异步Async和事务Transactional注解

时间:2023-02-05 21:12:38浏览次数:46  
标签:异步 事务 场景 Spring Transactional 线程 Async 方法

Spring开发中我们我们常常用到@Transaction和@Async,但这2个注解加在一起很多的开发者不敢用,担心事务不生效。下面我们就仔细讲解一下这2个注解同时运用,文章用3个场景讲述它们之间的运用,相信看完本篇文章你就能灵活运用这2个注解了。

场景一:@Async + @Transaction放在一个方法中,并且方法有异常发生

 

进行单元测试如下:

 

运行结果:事务回滚了,user没有新增进入数据库。

场景二:一个同步的方法,调用异步的方法,同步的方法抛出异常。

 

图片

然后同样运行上面的单测。PS至于上面为什么用applicationContext获取Bean不在本次讲解的范畴,是属于事务是否生效的知识点,如果想知道为什么后续文章进行讲解,可以点一下关注。

结果:第一个方法数据回滚了,第二个异步的数据保存成功了。

场景三:一个同步方法,调用2个异步的方法,2个异步的方法都抛出异常。

 

同样运行上面的单测。

结论:第一个同步方法保存数据成功,第二个和第三个异步方法保存数据失败。

上面的三个场景大概,概括了我们开发中的使用的场景,由上面的场景也可以得出结论:不同线程之间的事务完全隔离,异步线程内完全可以调用异步线程。

然后我们讲解一下第一种场景为什么事务加异步的方法能生效,大部分的开发者都对此有疑问。因为事务生效只在同一个线程中才能生效而使用异步方法时Sping又新创建了一个线程,以为这个事务不生效的,其实是生效的。我们知道不管是异步还是事务都是Spring运用了它的特性Aop。Aop中切面有一个执行顺序的注解,如下是Spring事务的默认的order

int LOWEST_PRECEDENCE = Integer.MAX_VALUE;

 

spring事务切面order为最大的整数值,也就是说它的执行优先级是最低的。所以可以知道Async异步的切面先执行,事务的切面后执行,通俗理解异步包裹了事务的执行,所以可以说事务是在异步的那个线程里面执行的,所以也就理解了为什么事务会生效。

微信公众号搜索:程序员xiaozhang 。如果遇到Spring的问题也可以私信我 能帮忙解决的尽量解决

 

 

标签:异步,事务,场景,Spring,Transactional,线程,Async,方法
From: https://www.cnblogs.com/scott1102/p/17093942.html

相关文章

  • Spring Cloud Ribbon
    服务调用Ribbon    Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,是Netflix公司开源的一个项目。Ribbon的定位是提供客户端的负载均衡算法。  Ribbon的作用......
  • Spring—IOC 容器
    在如今的JavaWeb开发中,Spring生态圈占据着巨大的市场份额。几乎是每个互联网公司都在用Spring生态圈的东西。所以掌握Spring相关知识就成为了我们工作和面试中必不可......
  • java——spring boot集成MongoDB——数据库安装和登录、简单使用
    参考文档,菜鸟教程:https://www.runoob.com/mongodb/mongodb-tutorial.html  参考文档、黑马教程:https://www.bilibili.com/video/BV1bJ411x7mq?p=1&vd_source=79bbd5b7......
  • 【Spring事物三千问】TransactionSynchronizationManager的原理分析
    TransactionSynchronizationManagerTransactionSynchronizationManager是管理每个线程的DB连接资源和事务同步的核心委托类。如果事务同步未处于活动状态,则表示当前没有......
  • 【Spring事物三千问】TransactionSynchronizationManager的原理分析
    TransactionSynchronizationManagerTransactionSynchronizationManager是管理每个线程的DB连接资源和事务同步的核心委托类。如果事务同步未处于活动状态,则表示当前没有......
  • 【Spring事物三千问】TransactionSynchronizationManager的原理分析
    TransactionSynchronizationManagerTransactionSynchronizationManager是管理每个线程的DB连接资源和事务同步的核心委托类。如果事务同步未处于活动状态,则表示当前没有......
  • SpringBoot访问windows共享文件
    前言最近有项目需要开发档案打包下载功能,其中包含很多大附件,项目使用minio存储且不在同一台服务器上,为了优化速度决定使用windows共享功能进行文件传输SMB1.0集成jcifs类......
  • SpringBoot访问windows共享文件
    前言最近有项目需要开发档案打包下载功能,其中包含很多大附件,项目使用minio存储且不在同一台服务器上,为了优化速度决定使用windows共享功能进行文件传输SMB1.0集成jcifs......
  • Spring4 - IoC容器
    容器:IoCIoC是InversionofControl的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序......
  • Spring Cloud Eureka
    资料springCloud官网springCloud中文开发文档springCloud中文社区网站  基础项目构建maven父工程建立,公用模块建立,服务提供模块建立消费模块建立在SpringCloud中,......