当前位置: 首页 > article >正文

Spring的事务管理

tx标签用于配置事务管理用于声明和配置事务的相关属性

transaction-manager指定一个事务管理器的引用,用于管理事务的生命周期
propagation指定事务的传播属性,决定了在嵌套事务中如何处理事务。
isolation指定事务的隔离级别,用于控制事务之间的隔离程度。
timeout指定事务的超时时间,用于防止长时间的事务占用数据
readOnly指定事务是否为只读事务,若为只读事务,则不允许对数据库进行写操作。
rollback-for指定需要回滚的异常类型,当出现指定的异常时,事务将回滚。
no-rollback-for指定不需要回滚的异常类型,当出现指定的异常时,事务不会回滚。

生命周期

数据库初始状态->start->sql执行->commit、rollback->数据库reflash

传播属性

Required(需要)
Mandatory(强制必须)
RequiresNew(需要新的)
Supports(支持)
NotSupported(不支持)
Never(不用)
  • Required(需要)    当前方法必须要求开启事务,如果当前线程不存在事务,则开启新的事务,如果当前线程已经存在事务,就加入到当前事务
  • Mandatory(强制必须)    当前方法必须要求事务,如果当前线程不存在事务,就抛出异常,如果存在,就加入到事务里。
  • RequiresNew(需要新的)    当前方法必须要求开启新的事务,如果当前线程已经存在事务上下文,就暂停当前事务,等到新事务结束之后,再继续恢复之前的当前方法支持事务,如果当前线程存在事务,就加入到事务中去,如果不存在,不做任何操作。
  • Supports(支持)    当前方法支持事务,如果当前线程存在事务,就加入到事务中去,如果不存在,不做任何操作。
  • NotSupported(不支持)    当前方法不支持事务,如果当前线程存在事务,就挂起当前事务,执行完当前方法,恢复事务。一般情况下在查询的时候使用,如果一个方法只是查询,并且非常耗时,就可以使用Not Support,避免事务时间超长。
  • Never(不用)    当前方法不支持事务,如果当前线程存在事务,则抛出异常
     

隔离级别

读已提交 READ_COMMITTED
读未提交 (READ_UNCOMMITTED)
可重复读  (REPEATABLE_READ)
可序列化读  (SERIALIZABLE)
  • "读未提交(READ_UNCOMMITTED)"    数据库最弱的隔离级别(完全不隔离),存在脏读、不可重复读、幻读的诸多问题
  • "读已提交READ_COMMITTED"    不允许事务B读取事务A还未提交的update操作更新后的数据(但是可见)。避免了脏读,但还可能出现不可重复读、幻读。
  • "可重复读(REPEATABLE_READ)"    所有被Select获取的数据都不能被修改,但是却没有办法控制幻读(可以增加数据)。
  • "可序列化读(SERIALIZABLE);"    事务之间最高的隔离界别,只能顺序的读取数据,当一个事务在读取和修改数据的时候,另外一个事务只能挂起,直到正在读取和修改数据的事务提交之后,挂起的事务才能执行.

数据库并发性问题

脏读    "对未提交的数据的读取。
一个事务对另一个事务中待定状态的数据,读取到了并且处理,所产生的依赖关系。"

不可重复读    同一个事务在两次读取之间该数据被其它事务所修改,两次读取的数据不同。


幻读    一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据

基本性质

原子性    (Atomicity)一个事务中的所有操作,要么全部成功,要么全部失败
一致性 (Consistency)事务执行前后,基于原子性,保证数据的一致性,例如A,B帐号之间的转账。
隔离性 (Isolation)事务和事务的可见性
持久性 (Durability)事务完成以后,所有的数据都将持久到数据库中,不会因为其他原因而丢失


http://www.kler.cn/a/418075.html

相关文章:

  • phpmyadmin导出wordpress数据教程
  • 服务器密码错误被锁定怎么解决?
  • 【UE5 C++】判断两点连线是否穿过球体
  • C#中switch语句使用
  • Linux笔记---进程:进程终止
  • flink1.6集成doris,并从mysql同步数据到doris
  • Serverless架构与AWS Lambda
  • 安卓逆向之Android-Intent介绍
  • Python Web 开发:FastAPI 基本概念与应用
  • 《Learn Three.js》学习(4) 材质
  • 高效智能的租赁管理系统助力企业数字化转型
  • 游戏引擎学习第26天
  • java与c#区别
  • 【Linux | 计网】TCP协议深度解析:从连接管理到流量控制与滑动窗口
  • vue多页面应用集成时权限处理问题
  • 局域网的网络安全
  • Flink维表join
  • 使用 Canal 实时从 MySql 向其它库同步数据
  • 【C++】赋值运算与变量交换的深入探讨
  • Agent构建总结(LangChain)
  • C/C++基础知识复习(32)
  • Clickhouse 数据类型
  • 【遥感综合实习】专题一 多时相多波段遥感影像的机器学习地物分类研究
  • 第十一课 Unity编辑器创建的资源优化_预制体和材质篇(Prefabs和Materials)详解
  • java-kafka面试相关基础题目整理01
  • 基于单片机的微型电子琴建模