spring事务
2022-09-21 09:51:36 14 举报
spring事务
作者其他创作
大纲/内容
事务异常
AspectJAfterThrowingAdvice
执行事务方法
AspectJReturningAdvice
doGetTransaction获取事务并判断事务对象中是否持有数据库连接对象
目标方法
获取事务属性资源getTransactionAttributeSource
事务正常提交
设置隔离级别
处理器异常completeTransactionAfterThrowing
获取事务名称
构造并返回TransactionStatus,TransactionStatus中存在suspendedResources,更新TransactionSynchronizationManager的信息
开启事务createTransactionIfNecessary
配置文件注册过或配置类@Bean
PROPAGATION_REQUIRES_NEW
设置AutoCommit位false
DynamicAdvisedInterceptor#intercept
不持有
AspectJAfterAdvice
否
目标方法是否执行异常
获取数据库连接对象
把数据库连接对象通过TransactionSynchronizationManager设置到ThreadLocal
suspend将当前对象进行挂起,并返回suspendedResources
执行拦截器链的目标方法
prepareTransactionInfo包装成TransactionInfo
获取事务切入点methodIdentification
获取数据库连接
提交事务rollback
判断事务的传播机制
有挂起的事务重新设置到TransactionSynchronizationManager并执行同步器的resume
是
事务拦截器前置操作执行完成,继续执行下一个拦截器+执行目标方法invocation.proceedWithInvocation();
AspectJBeforeAdvice
事务属性对象是指该对象是对事务隔离级别,传播行为,超时,是否只读,异常回滚,异常不回滚等事务属性进行抽象的事务对象。
设置数据库的连接的timeout
如果是其他值则会在当前事务下进行
获取事务对象getTransactionAttribute
doBegin
构建一个TransactionStatus
CGLIB代理对象
获取事务管理器determineTransactionManager
获取拦截器链
获取数据库链接提交事务commitTransactionAfterReturning
TransactionInterceptor
PROPAGATION_NOT_SUPPORTED
PROPAGATION_NESTED
AspectJAroundAdvice
AspectJAfterReturningAdvice
JdkDynamicAopProxy#invoke
PROPAGATION_MANDATORY
判断目标方法抛出的异常是否需要回滚
抛出异常
invokeWithinTransaction
getTransaction开启事务
清空事务信息cleanupTransactionInfo
PROPAGATION_NEVER
初始化注册过
从TransactionInfo获取事务管理器
setSavepoint设置保存点
ExposeInvocationInterceptor
JDK代理对象
其他
PROPAGATION_REQUIRED
持有
提交事务
提交事务commit
0 条评论
回复 删除
下一页