Spring事务
1.Spring事务隔离级别
default(默认)
PlatfromTransactionManager默认的隔离级别
使用数据库默认的事务隔离级别,
除了default 其它几个Spring事务隔离级别与JDBC事务隔离级别相对应
read_uncommited(读未提交)
一个事务可以读取另外一个事务未提交的数据
这可能出现脏读 而且不可重复度,出现幻像读等.
read_commited(读已提交)
一个事务可以读取另一个事务已经提交的数据
不可以读取未提交的数据
可以避免脏读 但是无法避免不可重复读和幻像读
repeatTable_read(可重复读)
一个事务可以读取另外一个事务已经提交的数据
可以避免脏读的前提下 也可以避免不可重复读
但是还是无法避免幻像读
serializable(串行化)
这是一个花费较高但是比较可靠的事务隔离级别
可以避免脏读 幻像读和不可重复读
(事务被处理为顺序执行)
2.Spring事务传播属性
required(默认属性)
如果存在一个事务 那么支持当前事务.
如果不存在事务,则新建一个事务.
被设置成这个级别时,会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务,那么后面的方法支持当前的事务,如果当前没有事务会重新建立事务。
Mandatory
如果当前存在事务,则支持当前事务,如果不存在事务,则抛出异常
Never
以非事务方式执行,如果当前存在事务,则抛出异常
Supports
如果当前存在事务,则支持当前事务,.如果不存在事务,以非事务方式执行
Not_Supports
以非事务方式执行操作,如果存在事务,则挂起当前事务
required_new
新建事务,如果当前存在事务则挂起当前事务
Nested
嵌套,支持当前事务,并增加savapoint点与当前事务同步提交或回滚.
嵌套事务的一个非常重要的概念就是内层事务依赖于外层事务
内层事务的执行失败不会导致外层事务的回滚
但是外层事务的回滚会影响内层事务导致内层事务随外层事务一同回滚.
文章参考:https://zhuanlan.zhihu.com/p/112183409