本文主要记录学习交易管理的学习路径。读者可以比较他们的学习路径,并一起讨论更好的学习路径。
接下来,它将根据基本路径进行扩展。源代码的顺序只会提取核心点,读者需要自行调试。
参考
门户网站
交易管理
Spring Framework完全支持交易,为交易管理提供一致性抽象。跨不同交易APIS的固定编程模型。支持声明声明。声明声明。随着Spring的数据库访问抽象完美集成的访问。
通过阅读上一篇文章,如果您使用语句交易,您可能会知道,弹簧框架的核心具有Ampact-Platformtransactionsman,可以管理资源的中心委托和交易的中心委托,并使用AOP Proxy and-transactionsychrnoizationmanager,并使用AOP Proxy.beanpostProcessor-abstractautoproxycreator,与PlatformTransactionsManager合作,实现围绕方法驱动的TransActionInterceptor。
以下将是一个简单的交易示例(使用mySQL,mybatis-plus,spring-boot)来绘制时间顺序图以查看核心类的作用。
模范
一般电话如下:
核心顺序应为:
核心类的源代码如下,核心周围的其他源代码将参与其他章节。
可以看出,代理的产生发生在初始化的后期。该事件是CGLIB代理,而不是JDK动态代理。
呼叫主要关注交易室内受体,并且处理周围事务的设计方法。例如,当您获得TransActionAttributesource时,确定特定的交易管理器,确定是否根据交易的背景来创建新的交易,绑定资源和约束资源。
核心中的代码代码
总体而言,可以看出,@enableTractionManagement将影响全球APC选择,并且还会影响TransactionAdvisor的顺序,这对于处理多个顾问非常方便。
至于为什么@enableTransActionManagement默认默认adviceMode.proxy,proxytargetClass = false不能实现接口,并且可以使用 @transactional,因为最终的APC是AnnotawareaspectJautoproxycreator。
根据上面的顺序图,可以发现AdviceModeImportSelector#selectimports输入参数是不同的。如果添加它,如上所述@configuration是我们编写的应用程序。如果您不添加@configuration。
发现类似于普通注入。注射的tryservice是预先表示的豆。
组合序列图,调用时间绘图,@enabletransactionsmanagement计时器图,我们将合并。
首先,您必须了解管理层的对象是谁。以下是本地人用JDK编写SQL的本地人
主要是建立连接,重复使用连接和清理的连接管理。特别是,可以根据上述呼叫的顺序来理解TransActionManager和TransactionsynchronizationManager之间的合作。
春季交易的底层取决于物理交易,例如MySQL。连接打开了物理交易。逻辑交易是为了根据传播确定当前交易的行为(例如挂起当前交易以打开新事务,或加入当前交易)。根据业务逻辑控制物理事务。物理交易对应于连接,连接可能具有多个逻辑交易。
默认传播。需要通过上面的“呼叫序列图”来理解。以下将解释通常的传播。Propagation_nested通信行为。通过比较默认的沟通行为,春季对逻辑事务的处理可能会更清楚,与此同时,它也可以看出事务的回滚。以下具体图:
可以看出,问题_nest并未创建新的交易来处理现有事务,更改TransactionStatus属性,尤其是SavePoint,最后执行基础数据的“回滚至保存点”语句(表明这种通信行为需要基础数据的基础数据。支持),然后返回到外部IndokeWithTransaction。
TransActionLealeventListener是在TransactionsynchronizationManager中注册的ApplicationEventMulticaster。TransactionsynchronizationManager提供了一些交易钩,以根据交易执行您发布的交易。