重温-Spring事务核心类-TransactionInterceptor TransactionAspectSupport

/**
 *  注: > 第一次进入事务流程 newTransaction 值为 true
 *      > requires_new 类型传播属性 newTransaction true
 *
 * (1) 结果获取到 DefaultTransactionStatus
 * (2) 判断事务存在事务不存在则直接创建事务
 *     (2.1) doBegin() 方法
 *       a. 从数据源对象中获取 数据库连接Connection(jdk) 封装成 ConnectionHolder(spring)
 *       b. 获取到连接后是否开启自动提交 开启了就关闭自动提交
 *       c. 激活事务状态 transactionStatus 设置为 true
 *       d. 超时验证
 *       e. 两层绑定
 *          (1) dataSource[数据源] -> connectionHolder 关系绑定
 *          (2) map 关系 设置到NamedThreadLocal对象 与当前线程进行绑定
 * (3) 存在事务 需要考虑两种特殊的 事务传播属性
 *     never / not_support / required / requires_new / nested
 *     <3.1> not_support 不支持事务 当前事务会挂起不走事务
 *     <3.2> requires_new / nested 两种传播属性需要特殊注意
 *         a. requires_new 新建事务并将当前事务挂起
 *            挂起: (1) 将事务对象的 连接置空 null
 *                 (2) 数据库连接 和 事务的连接对象解绑同时从 ThreadLocal 中移除,并返回旧的连接对象
 *                 (3) 将旧的连接对象 设置到新的DefaultTransactionStatus对象以便于恢复旧的事务
 *                 (4) 挂起完成后 创建新的事务 重新执行 2.1 步骤
 *                     获取连接/关闭自动提交/激活事务/超时验证/绑定新的关系
 *         b. nested 嵌套事务 支持当前事务,通过创建savePoint, 与当前事务共用同一连接对象
 *         DefaultTransactionStatus.createSavepoint()
 *         创建savepoint_0 保存点nest 每执行一次 生成一个 savepoint按调用方法的层次同一线程需要递增
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值