spring-事务流程图
2024-03-25 21:16:04 3 举报
spring-事务流程图描述了spring框架中事务管理的执行过程。整个过程主要包括以下几个关键部分: 1. 事务适配器:spring提供了多种事务适配器,如DataSourceTransactionManager和HibernateTransactionManager等,它们负责与底层数据库或ORM框架进行交互。 2. 事务管理器:spring中的事务管理器(如PlatformTransactionManager)是事务管理的核心部分,它负责管理事务的整个生命周期,包括开启、提交、回滚等操作。 3. 事务定义:spring允许开发者通过@Transactional注解或XML配置定义事务,包括事务的隔离级别、传播行为等。 4. 事务切面:spring使用AOP(面向切面编程)实现事务管理,通过在方法执行前后加入事务的开启、提交、回滚等操作,实现对目标方法的事务增强。 5. 数据库或ORM框架:spring的事务管理最终要通过数据库或ORM框架实现,如MySQL、Hibernate等。 整个流程图展示了spring事务管理的核心组件和执行流程,有助于开发者理解和掌握spring事务管理的原理和实现方式。
作者其他创作
大纲/内容
注册
就是调用commit
createTransactionIfNecessary开启事务
startTransaction开启事务
执行调用链事务的advisor优先级最低,且只有一个advice。
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#selectImports
没有指定会从容器中获取springBoot默认回去的是DataSourceTransactionManager
TransactionInterceptoradvice 事务拦截器
执行调用链下一个拦截器,通常是目标方法
TransactionInterceptor#invoke执行调用链
commitTransactionAfterReturning提交事务
出现异常
startTransaction开启新事务
TransactionExecutionListenerSpring 6 添加的接口,在事务进行操作的时候会回调ConfigurableTransactionManager#setTransactionExecutionListeners
prepareTransactionInfo封装成TransactionInfo
@EnableTransactionManagement注解开启事务
suspend挂起当前事务
AutoProxyRegistrar
AbstractPlatformTransactionManager事务管理器
TransactionAttributeSourcePointcut切点
否
TransactionSynchronization在事务进行操作的时候会回调TransactionSynchronizationManager#registerSynchronization
AbstractPlatformTransactionManager#rollback回滚
把前面的TransactionInfo放入到ThreadLocal中
completeTransactionAfterThrowing处理异常
AbstractPlatformTransactionManager#getTransaction获取TransactionStatus
TransactionAspectSupport#invokeWithinTransaction
REQUIRES_NEW
import注入
InfrastructureAdvisorAutoProxyCreator继承了AbstractAdvisorAutoProxyCreator开启动态代理
cleanupTransactionInfo清理事务信息
传播行为是否是MANDATORY
ProxyTransactionManagementConfiguration
org.springframework.transaction.annotation.Transactionaljavax.transaction.Transactionaljavax.ejb.TransactionAttribute
AnnotationTransactionAttributeSource处理事务注解
生成代理,调用逻辑在aop流程图中
抛异常
BeanFactoryTransactionAttributeSourceAdvisor一个Advisor
传播行为是否是REQUIREDREQUIRES_NEWNESTED
handleExistingTransaction存在事务的情况下
0 条评论
回复 删除
下一页