目录
一、事务的定义和意义
二、事务的实现
1、MySQL事务的回顾
2、Spring声明式事务(利⽤注解⾃动开启和提交事务)
前置知识及概念
Spring的事务管理默认是针对***unchecked exception**回滚,也就是默认对Error异常和RuntimeException异常以及其子类进行事务回滚,且必须抛出异常,若使用try-catch对其异常捕获则不会进行事务回滚操作
因此
关于异常详情见:异常
实例分析:事务的回滚
我们通过url模拟添加操作
那么如果出现了异常,数据库中会不会添加这一条就记录呢?
可以看到,我们再浏览器的url输入的lisi这条记录,没有成功添加到数据库中。
原因就是@Transactional 注解的自动回滚操作——》通过该注解,我们⽆需⼿动开启事务和提交事务,进⼊⽅法时⾃动开启事务,⽅法执⾏完会⾃动提交事务,如果中途发⽣了没有处理的异常会⾃动回滚事务
🔔特殊情况(无自动回滚)
我们再浏览器里继续上面的操作(尝试添加一条lisi的记录,看看有什么变化)
可以看到数据库中有了lisi这条数据——》@Transactional 在异常被捕获的情况下,不会进⾏事务⾃动回滚。
🔔事务不会⾃动回滚解决⽅案
🔔@Transactional工作原理
@Transactional 实现思路预览:
三、Spring事务传播机制
1、事务的隔离级别及传播机制的引入
Spring 中事务隔离级别包含以下 5 种
从上述介绍可以看出,相⽐于 MySQL 的事务隔离级别,Spring 的事务隔离级别只是多了⼀个
Isolation.DEFAULT(以数据库的全局事务隔离级别为主)
为什么需要事务的传播机制
- 事务隔离级别是保证多个并发事务执⾏的可控性的(稳定性的).
- 而事务传播机制,是保证⼀个事务在多个调⽤⽅法间的可控性的(稳定性的)
2、事务的传播机制
Spring 事务传播机制包含以下 7 种:
REQUIRED需要有(事务的默认传播机制)和NESTED嵌套事务的区别:
3、事务的隔离级别和事务的传播机制的区别
事务隔离级别解决的是多个事务同时调⽤⼀个数据库的问题
事务传播机制解决的是⼀个事务在多个节点(⽅法)中传递的问题(或多个事务的嵌套和互相加入)
参考文章:
SpringBoot 使用 @Transactional 注解配置事务_深寒色的猫丶的博客-CSDN博客
JavaEE进阶 - Spring事务和事务传播机制 - 细节狂魔_java事务传播机制_Dark And Grey的博客-CSDN博客