spring事务管理
2020-07-25 本文已影响0人
呆呆猿
原理是通过ThreadLocal实现的,看源码
image.png
先从transactionTemplate.execute开始
image.png
获取Transaction AbstractPlatformTransactionManager.getTransaction,
一些事务的传播性,默认是TransactionDefinition.PROPAGATION_REQUIRED
执行 startTransaction()方法
DataSourceTransactionManager.doBegin
image.png
绑定ConnectionHolder到ThreadLocal
image.png
再看来下dao层是如何获取Connection的
执行update方法
image.png
看execute
image.png
DataSourceUtils.getConnection 获取Connection
image.pngTransactionSynchronizationManager.getResource(dataSource)就能获取到之前存入的ConnectionHolder了
image.png