spring事物流程图
2022-09-08 20:15:43 5 举报
1111
作者其他创作
大纲/内容
如果当前执行的是新开的一个事务,则直接回滚
找到spring容器中为TransactionManager的Bean并强制转换为PlatformTransactionManager
执行后续的invocation.proceed(),也就是sql语句
PROPAGATION_NESTED
执行一系列的我们设置的同步器
恢复挂起的资源重新设置到threadLocal中
否
PROPAGATION_REQUIRES_NEW
如果是其他值就会在当前事物中运行
子流程
注册一个InfrastructureAdvisorAutoProxyCreator
如果是需要强制回滚
getTransactionAttributeSource()拿到注解信息
设置数据库的过期时间
生成事物名称也就是当前方法的名字
调用doSuspend()将我们的链接制空,并清空threadLocal,设置TransactionSynchronizationManager,返回链接
PROPAGATION_NEVER
提交事务
调用getTransaction()方法
其它
把新建的数据库链接设置到threadLocal中去,事物管理器中设置的datasource为key,数据库连接为value
创建事物
创建新的事物
执行triggerAfterCompletion
开启一个新的事物,创建一个新的链接,并且把新的链接设置到ThreadLocal中
挂起当前线程中的事物
调用findTransactionAttribute()方法先去方法上面找,再去类上面找,将找到的注解信息封装到RuleBasedTransactionAttribute,把结果放到缓存中并返回
获取@Transaction注解属性值
调用doSuspendSynchronization获取所有的我们自己设置的同步器
回滚
当事物进行回滚的时候,会回滚到上一个安全点
AotuProxyRegistrar
设置Autocommit为false
正常执行
抛异常
提交事物
ProxyTransactionManageManagementConfiguration
如果当前事物是一个已存在的共用的事物,则要判断当前整体的事物需不需要回滚
会注册两个bean,AutoProxyRegistrar和ProxyTransactionManagementConfiguration
判断传播机制
判断当前事物是否设置了需要回滚跟globalRollbackOnParticipationFailure有关系
判断当前事物中是否设置了安全点savePoint
Spring事务流程图
doBegin
根据当前dataSource获取一个数据库链接,此链接不是新的链接,并封装到一个DataSourceTransactionObject对象中
设置事物的隔离级别
会调用invoke方法
执行invokeWithinTransaction(方法)
TransactionInterceptor
PROPAGATION_MANDATORY
PROPAGATION_NOT_SUPPORTED
PROPAGATION_REQUIRED
如果设置了就回滚到savepoint
开启@EnableTransactionManagement
作用就是开启自动代理
AnnotationTransactionAttributeSource
是
判断isLocalRollbackOnly是否为true
挂起子流程
执行被代理对象中的方法
判断DataSourceTransactionObject对象中的数据库链接是否为空,是否为false
创建一个savepoint
判断当前线程中使用的dataSource还没有创建链接则新建一个链接
把当前事物挂起,并返回suspendedResources
相当于找切点即找带有@Transaction注解得类或者方法
回滚子流程
收藏
0 条评论
下一页