Spring事务详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、事务的基础?

1.事务的特性

  • A(原子性):同一个事务内的操作是原子性的,要么全都提交,要么全都回滚;
  • C(一致性):事务内的所有事件在执行前后都将处于一致性的,不能存在一部分提交的状态;
  • I(隔离性):多个事务之前应该是互相独立不影响的;
  • D(持久性):事务一旦提交就应该处于持久化状态;

2.事务的隔离级别

  • read uncommitted(读未提交):顾名思义就是在事务中可以读到其它事务还没有提交的更新,会导致dirty read(脏读),fuzzy read(不可重复读),phantom(幻读);
  • read committed(读已提交):事务中能读取到其它事务已提交的数据,解决了dirty read,但是仍然会存在fuzzy read在同一个事务中两次读取同一个值得到不同结果;
  • repeatable(可重复读,mysql默认隔离级别):解决了fuzzy read问题,及在事务中读取的数据会被加锁,其它事务无法进行修改。
  • Serializable(可串行化):解决phantom(幻读)问题,及解决了在读取一批数据时,其它事务执行插入操作,而当前事务查询前后数据数量不一致问题;使用间隙锁实现或直接锁表;

3.Spring事务的传播特性(spring特有的封装)

  • request:外部抛异常,内部事务回滚。内部抛异常就算外部方法捕获并处理了异常,外部事务也会回滚;(同一个事务,一旦有异常就回滚)

  • request-new:外部抛异常,内部事务不回滚。内部抛异常只要外部方法捕获并处理了异常,外部事务不会回滚;(不同事务,有异常不往外抛则外部事务不会回滚)

  • nested:外部抛异常,内部事务回滚。内部抛异常只要外部方法捕获并处理了异常,外部事务不会回滚;(嵌套事务,内部异常处理后可以单独回滚,外部异常之前全部回滚)

  • supports:如果有事务则加入和request一样,如果没有事务就以非事务的形式运行(request会新开一个事务)

  • not_supports:以非事务的方式运行,如果有事务就挂起;

  • never:如果有事务就报错

  • mandatory:如果没有事务就报错

二、源码解析

1.SpringAop/事务 解析主流程

在这里插入图片描述

2.SpringAop/事务 调用主流程

在这里插入图片描述

总结

流程比较抽象,主要用于个人总结,后续有时间会进行完善;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值