Spring的事务控制——学习历程

思考:

  1. 事务是干什么的?

  2. 事务的特性?

  3. 事务控制的传播方式(传播行为)

  4. 事务的隔离级别

  5. 事务是如何实现的?

  6. 事务的回滚方式

  7. 事务失效场景

回答:

  1. 事务和锁,还有版本控制 都是为了保证数据一致性的。

  2. 事务都是围绕着ACID来的(分布式事务CAP),A是原子性 ,把整个事务看做为一个不可分的原子,必须都对,或者都错;C是一致性 ,事务执行前,数据库处于一致状态;执行后,即使发生故障,数据库仍须保持一致性(例如:转账前后总金额不变);I是隔离性 ,事务和事务之间相互隔离,互不干扰;D是持久性,他主要是针对数据库层面,一旦事务完成,他的CRUD就都保存在数据库里,被持久化了。

  3. Spring 支持多种事务传播行为,例如:

  • PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;否则新建一个事务。
  • PROPAGATION_REQUIRES_NEW:无论当前是否存在事务,都新建事务,并挂起当前事务。
  • PROPAGATION_SUPPORTS:支持当前事务,不存在则以非事务方式执行。
  • PROPAGATION_MANDATORY:必须存在事务,否则抛出异常。
  • PROPAGATION_NEVER:不能存在事务,否则抛出异常。
  • PROPAGATION_NESTED:在嵌套事务中执行。
  1. 事务的隔离级别相比MySQL数据库多了一个级别:默认(DEFAULT
  • DEFAULT:使用数据库默认的隔离级别。

MySQL的隔离级别有:可序列化 > 可重复度(幻读) > 读已提交(脏读) > 读未提交

  1. 是采用的AOP方法,@Transaction为标识,每次开启动态代理(Java的动态代理,JDK),在同一个线程内,多个 DAO 操作可以共享同一个数据库连接和事务。当事务提交或回滚后,这些资源会被释放。

6.回滚方式:(我记得好像可以调节隔离级别查看事务的回滚过程【之前尝试过,现在有点不清晰了】)

  • 默认情况下,Spring 只对运行时异常(RuntimeException 及其子类)和 Error 进行回滚。
  • 可以通过 rollbackFor 和 noRollbackFor 属性自定义哪些异常触发回滚。

7.(鞭策AI给的一份应面回答)

补充:

  1. JDK代理 和 CGLIB代理的区别 :前者靠反射, 后者考继承,前者主要针对接口类,后者针对非接口,非final的类
相关推荐
嗯嗯**1 分钟前
Neo4j学习2:概念、数据展示、CQL使用
数据库·学习·neo4j·数据存储·图数据库·序列化·cql
whale fall2 分钟前
如何在同一台电脑里安装32 位 Python 和 64 位 Python
开发语言·笔记·python·学习
阿蒙Amon3 分钟前
TypeScript学习-第9章:类型断言与类型缩小
javascript·学习·typescript
困死,根本不会7 分钟前
OpenCV摄像头实时处理:稳定的红绿激光点实时检测工具
笔记·opencv·学习
lingggggaaaa10 分钟前
安全工具篇&魔改二开&CheckSum8算法&Beacon密钥&Stager流量&生成机制
学习·算法·安全·web安全·网络安全·免杀对抗
Python+JAVA+大数据12 分钟前
SQL玩出算法竞赛高度!郑凌云数独算法:递归CTE+位运算DFS回溯全解析
数据库·sql·算法·搜索引擎·深度优先·dfs
YangYang9YangYan17 分钟前
大数据与会计专业学习发展指南
大数据·学习
TDengine (老段)20 分钟前
TDengine TSDB 3.4.0.0 上线:虚拟表、流计算性能显著提升,安全能力全面进阶
大数据·数据库·物联网·安全·时序数据库·tdengine·涛思数据
Leo.yuan20 分钟前
制造业常用BOM详解:单层BOM、多层BOM、工艺BOM、虚拟BOM
大数据·数据库·信息可视化·bom
筷乐老六喝旺仔29 分钟前
使用Python进行PDF文件的处理与操作
jvm·数据库·python