Spring事务流程
2021-10-21 11:17:28 0 举报
详解Spring事务实现
作者其他创作
大纲/内容
实现
TransactionInterceptor.invoke方法
注入
try
catchcon.rollback()
事务B
AbstractAutoProxyCreator.class中实现了postProcessAfterInitialization()方法,进行代理类的创建。
创建新的事务B,并将事务信息设置到当前线程中。
事务挂起:如果设置methodB需要挂起事务A
创建
PointCut : TransactionAttributeSource
ImportBeanDefinitionRegistrar.class
绑定当前线程变量
method()
ConnectionHolder设置连接、isReadOnly、隔离级别、事务超时时间
事务的调用
开启新的事务
ThreadLocal
根据事务A和事务B执行情况,一起进行提交/回滚
事务代理类创建类InfrastructureAdvisorAutoProxyCreator.class
con.commit()
事务A执行完成
con.setAutoCommit(false);
AutoProxyRegistrar.class主要生成代理创建工具类
创建事务拦截器
ImportSelector
挂起事务
创建advisor
methodB
调用
代理类
AbstractPlatformTransactionManager检查事务嵌套
是否需要创建事务?
internalTransactionAdvisor : BeanFactoryTransactionAttributeSourceAdvisor
TransactionInterceptor
ProxyTransactionManagementConfiguration.class主要生成advisor
resume(suspendedResources)
methodA
是
事务流程处理方法:invokeWithinTransaction
创建新的事务B
将当前线程的事务属性备份至suspendedResources对象,清空线程事务属性(ThreadLocal中保存的事务信息)。
事务A
创建PointCut
注入BeanDefinition
事务B执行完成
调用目标方法
取出挂起事务,并恢复
调用代理对象方法
@EnableTransactionManagement开启事务
suspendedResources
匹配advisor
收藏
收藏
0 条评论
下一页