Spring源码剖析(三)事物隔离级别和传播属性复习

写着写着感觉还是得复习基础知识,面试时传播属性中的嵌套事物被问住了,没记起来,尴尬整理下

首先熟悉下数据库中的事物

事物

A(Atomic)原子性

简单理解事物是可能是多个活动的工作单元要么全部发生要么全部不发生

C(Consistent)一致性

事物完成后,系统必须保证所建模的业务处于一致的状态

I(Isolated)隔离性

事物允许多个用户操作,每个用户的操作不会与其他用户纠缠起来

D(Durable)持久化

一旦事物完成结果应保存起来,在系统崩溃中可以恢复回来

 

Spring中事物类型

(1)编程式事物,通过编程方式管理,保持灵活性,但难维护

(2)声明式事物,业务代码和事物分离只需注解和xml配置管理事物

 

spring中事物的声明

@Transactional

首先需要理解它的五个参数

value 和 transactionManager 属性

指定使用那个事务管理器 SpringBoot默认DataSourceTransactionManager

 

1.隔离级别

 

ISOLATION_DEFAULT  使用底层默认
ISOLATION_READ_COMMITTED允许读取其他并行事物Commit的数据字段,可防止脏读
ISOLATION_READ_UNCOMMITTED允许事物读取其他并行事物还没送出去的数据会发生Dirty,Nonrepeatable,Phantom read
ISOLATION_REPEATABLE_READ    要求多次读取数据相同
ISOLATION_SERIALIZABLE   串行化会锁住表格

 

2.传播行为proganation

业务方法在容器中运行 如果 存在父事物    如果 不存在父事物
REQUIRED     在父事物中运行   自己新建一个事物
SUPPORTS在父事物中运行正常执行
MANDATORY在父事物中运行抛出异常
REQUIRES_NEW 新建事物,将父事物挂起       自己新建事物
NOT_SUPPORTED如果存在方法调用将父事物挂起,调用结束恢复 不会开启事物
NEVER抛出 异常    正常执行
NESTED    它的事物和父事物是相依的    它父事物   一起提交,父事物回滚它也回滚自己新建         

理解Nested的关键是savepoint。

 

3.只读,此时可以利用数据库的最佳优化动作

指定事务是否为只读事务,默认值为 false;为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true。

4任务超时     搭配REQUIRED    REQUIRED_NEW    NESTED

timeout 默认-1  如果超过时长没有执行完自动回滚

5.回滚规则rollback_for     no_rollback_for

可以指定多个回滚类型  默认的只有在RUNTIME异常和ERROR才会回滚

 

在Spring中声明事物 让我们复杂的事务处理得到解脱

比如处理获取连接,关闭连接,事务提交和回滚操作不需要在相关方法中处理大量的try catch finally 

 

使用起来简单但是还有大量的配置规则

而且注意这里的异常只是指运行时异常

 

参考链接

https://blog.csdn.net/nextyu/article/details/78669997

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值