Spring事务源码(1)-TransactionInterceptor
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring事务源码(1)-TransactionInterceptor相关的知识,希望对你有一定的参考价值。
参考技术A 事务执行过程如图:a b 两个对象分别都是用了@Transactional注解开启声明式事务
问题一:如果 b 方法自己捕获了异常,那 ab 事务会提交吗?
问题二:如果 a 方法对b方法捕获异常 那 ab 事务会提交吗?
问题三:如果把条件改成 @Transactional(propagation = Propagation.REQUIRES_NEW) 呢?重复上面一 ,二 问题
TransactionAspectSupport
completeTransactionAfterThrowing
处理一个可抛出的,完成事务。
我们可以提交或回滚,这取决于配置。
txInfo.getTransactionManager().rollback(txInfo.getTransactionStatus());
AbstractPlatformTransactionManager.rollback 方法
processRollback(defStatus, false);
回滚的处理方法 提交的方法里面也有调用到 先mark
AbstractPlatformTransactionManager.commit方法
判断异常类型
txInfo.transactionAttribute.rollbackOn(ex)
spring源码学习spring的事务管理源码学习
一、抽象概念
1、事务管理器
接口:org.springframework.transaction.PlatformTransactionManager
实现类:org.springframework.jdbc.datasource.DataSourceTransactionManager
2、事务定义和配置
事务定义接口:org.springframework.transaction.TransactionDefinition
事务配置接口:org.springframework.transaction.interceptor.TransactionAttribute
接口实现类:org.springframework.transaction.interceptor.RuleBasedTransactionAttribute
3、事务配置源
接口:org.springframework.transaction.interceptor.TransactionAttributeSource
接口实现类:org.springframework.transaction.annotation.AnnotationTransactionAttributeSource
4、事务增强器
实现:org.springframework.transaction.interceptor.TransactionInterceptor (Advice接口实现)
5、事务切面管理
切面:org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor(Advisor的接口实现)
切点:org.springframework.transaction.interceptor.TransactionAttributeSourcePointcut(Pointcut的接口实现)
类过滤器:org.springframework.aop.TrueClassFilter(ClassFilter接口实现)
方法过滤器:org.springframework.transaction.interceptor.TransactionAttributeSourcePointcut(MethodMatcher的接口实现)
增强:org.springframework.transaction.interceptor.TransactionInterceptor (Advice接口实现)
二、事务传播机制
事务传播行为类型 |
说明 |
PROPAGATION_REQUIRED |
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 |
PROPAGATION_SUPPORTS |
支持当前事务,如果当前没有事务,就以非事务方式执行。 |
PROPAGATION_MANDATORY |
使用当前的事务,如果当前没有事务,就抛出异常。 |
PROPAGATION_REQUIRES_NEW |
新建事务,如果当前存在事务,把当前事务挂起。 |
PROPAGATION_NOT_SUPPORTED |
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
PROPAGATION_NEVER |
以非事务方式执行,如果当前存在事务,则抛出异常。 |
PROPAGATION_NESTED |
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 |
事务拦截器-创建事务(事务传播机制的流程图)
以上是关于Spring事务源码(1)-TransactionInterceptor的主要内容,如果未能解决你的问题,请参考以下文章
老王读Spring Transaction-3TransactionDefinition原理和源码解析