Spring事务流程解析

从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()

猜你喜欢

转载自blog.csdn.net/qq_18860653/article/details/80049281