Spring核心知识点 - 事务传播特性

事务隔离级别

事务隔离级别

脏读:读取了其他事务修改但回滚(未提交)的数据
不可重复读:A事务对同一条数据多次读取,其间B事务对该条数据进行了更改,导致A事务对同一条数据前后读取不一致
幻读:在范围查询时,有其他事务在该范围中新增了数据,导致前后获取到的数据总数不一致

事务传播特性

事务传播特性
失效场景:

  • 修饰非public方法:Spring Aop代理时,只会对public方法读取 @Transactional注解 开启事务配置
  • 类内部调用不触发事务:事务是基于动态代理实现的,一个类内部调用不会经过代理方法,无法触发织入的代码
  • 数据库引擎不支持事务

PS: read-only属性 - 为了忽略那些不需要事务的方法,比如读取数据,可以设置 read-only 为 true

tips:

  1. Spring事务和线程相关联,底层是一个ThreadLocal<Map<DataSource, Connection>>,一个线程一个链接一份事务。
  2. innoDB通过MVCC(快照读-多版本并发控制)和LBCC(当前读-基于锁的并发控制)解决了RR隔离级别下的幻读问题。
  3. 事务的挂起:TransactionManager实现事务是通过Aop代理控制connection,当需要挂起事务时,则获取新的connection进行操作即可。
posted @ 2021-01-29 22:44  祁奇  阅读(60)  评论(0编辑  收藏  举报