Spring源码深度解析读书日记十

事务

Spring声明式事务

spring支持的集中事务类型

  1. PROPAGTION_REQUIRES_NEW:表示当前方法必须在它自己的事务里运行,一个新的事务将被启动,而如果有一个事务正在运行的话,则表示这个方法运行期间被挂起。
  2. PROPAGTION_NESTED:表示如果当前正有一个事务在运行中,则该方法应该运行在一个嵌套的事务中,被嵌套的事务可以独立于封装事务进行提交或者回滚。

事务增强器

TransactionInterceptor支撑着整个事务功能的架构。
在Spring中支持两种事务处理的方式

  1. 编程式事务
  2. 声明式事务

声明式事务的主要处理步骤

  1. 获取事务的属性
    对于事务处理来说,最基础或者说最首要的工作便是获取事务属性了,这是支持整个事务功能的基石,如果没有事务属性,其他功能也无从谈起。
  2. 加载配置中配置的TransactionManager
  3. 不同的事务处理方式使用不同逻辑
    区别
    1. 编程式事务不需要事务属性
    2. TransactionManager,CallbackPreferringPlatfrom TransactionManager实现PlatfromTransactionManager接口,暴露出一个方法用于执行事务处理中的回调。
  4. 在目标方法执行前获取事务并收集事务信息。
  5. 执行目标方法
  6. 一旦出现异常,尝试异常处理,默认值针对运行时异常有效
  7. 提交事务前的事务信息清除
  8. 提交事务

创建事务

创建事务的步骤

  1. 获取TransactionAttribute实例
  2. 获取事务
  3. 构建事务信息
获取事务
  1. 获取事务
  2. 如果当前线程存在事务,则转向潜逃事务的处理
  3. 事务超时验证
  4. 事务propagationBehavior属性的设置验证
  5. 构建DefaultTransactionStatus
  6. 万三transaction,包括ConnectionHolder,隔离级别,timeout,如果是新链接则绑定到当前线程。
处理一存在的事务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值