Spring事务流程解析

Spring 同时被 2 个专栏收录
21 篇文章 0 订阅
12 篇文章 0 订阅

从Spring配置入口

 <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

<!--配置基于注解的声明式事务,默认使用注解来管理事务行为-->
<tx:annotation-driven transaction-manager="transactionManager"/>

可以看到,我们在配置Spring事务的时候,定义了一个DataSourceTransactionManager,
这个类的作用是什么?
从名字上看是“数据源事务管理者”,
先来回顾一下在JDBC中,是如何操作事务的:
1. 设置AutoCommit为手动提交
2. 所有的Statement执行完毕后,手动进行commit
3. 发生异常的时候,捕获,回滚(也可以回滚到指定地方)

现在,我们再来看DataSourceTransactionManager,
我们先基于写一个Service,里面操作几个DAO,然后加上@Transactional
执行这个方法的时候,会包装一层(Spring AOP切面)
注解,然后debug进入DataSourceTransactionManager,主要流程如下:
1. doGetTransaction
2. doBegin:获取Connection、设置自动提交为false、事务传播行为等一些参数的设置

3.执行带有@Transactional注解的方法

4.doCommit:事务提交
5.doRollback:如有异常则进行事务回滚

Spring tx 切面过程:
切入类:
org.springframework.transaction.config.TxNamespaceHandler->init()->AnnotationDrivenBeanDefinitionParser()->configureAutoProxyCreator()

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值