Spring事务源码分析

Spring事务在执行过程中, 会有两个拦截器, 第一个是TransactionInterceptor,即事务拦截器,他的targetClass是标注@Transactional方法所在的class,方法为标注@Transactional的方法。然后在target方法之前执行DataSourceTransactionManager的doBegin()方法。doBegin方法完成的任务是将connection的自动提交改为false,将DataSourceTransactionObject的connectionHolder的事务属性设为active, 设置事务的超时时间,隔离级别,只读等属性。开始执行@Tranactional标注的方法里的语句,到下一个拦截器:MapperProxy,做了一些我看不懂的操作,然后触发下一个拦截器:sqlSessionInterceptor, 调用Executor去执行sql语句, 如果抛除了异常,则回到TransactionInterceptor,根据回滚规则决定是否回滚,满足回滚条件,由DataSourceTransactionManager执行回滚:由Transaction synchronization来回滚SqlSession然后关闭SqlSession, DataSourceTransactionManager释放数据库连接。

你可能感兴趣的:(spring,事务)