spring-事务流程图
2021-09-03 15:15:22 6 举报
spring-事务流程图
作者其他创作
大纲/内容
注册
就是调用commit
createTransactionIfNecessary开启事务
startTransaction开启事务
执行调用链事务的advisor优先级最低,且只有一个advoice。
NOT_SUPPORTED不使用事务执行
AbstractTransactionStatus#createAndHoldSavepoint创建保存点
不存在
是
AbstractPlatformTransactionManager#doBegin都交给子类实现实际就是设置不自动提交
没有异常的情况下
当前是否存在事务
把前面的TransactionInfo去出来,把当前的TransactionInfo保存到ThreadLocal
NESTED嵌套事务
AbstractPlatformTransactionManager#doGetTransaction创建事务对象TransactionStatus由各种实现类实现不同的方式
以假如@EnableTransactionManagement和@EnableAspectJAutoProxy 同时存在, 那么AOP的 AutoProxyCreator 会进行覆盖。org.springframework.aop.config.AopConfigUtils#APC_PRIORITY_LIST
存在
隔离级别为NEVER则抛异常
到这了说明是SUPPORTSNOT_SUPPORTEDNEVER
processRollback
TransactionManagementConfigurationSelector
没有指定会从容器中获取springBoot默认回去的是DataSourceTransactionManager
TransactionInterceptoradvice 事务拦截器
执行调用链下一个拦截器,通常是目标方法
TransactionInterceptor#invoke执行调用链
commitTransactionAfterReturning提交事务
出现异常
startTransaction开启新事务
prepareTransactionInfo封装成TransactionInfo
@EnableTransactionManagement注解开启事务
suspend挂起当前事务
AutoProxyRegistrar
AbstractPlatformTransactionManager事务管理器
TransactionAttributeSourcePointcut切点
否
AbstractPlatformTransactionManager#rollback回滚
把前面的TransactionInfo放入到ThreadLocal中
completeTransactionAfterThrowing处理异常
AbstractPlatformTransactionManager#getTransaction获取TransactionStatus
TransactionAspectSupport#invokeWithinTransaction
REQUIRES_NEW
import注入
InfrastructureAdvisorAutoProxyCreator
cleanupTransactionInfo清理事务信息
传播行为是否是MANDATORY
ProxyTransactionManagementConfiguration
org.springframework.transaction.annotation.Transactionaljavax.transaction.Transactionaljavax.ejb.TransactionAttribute
AnnotationTransactionAttributeSource处理事务注解
生成代理,调用逻辑在aop流程图中
抛异常
如果有保存点,则回退到上一个保存点。否则回滚
BeanFactoryTransactionAttributeSourceAdvisor核心
传播行为是否是REQUIREDREQUIRES_NEWNESTED
handleExistingTransaction存在事务的情况下
0 条评论
回复 删除
下一页