了解 Spring 框架的声明式事务实现

仅仅告诉您使用@Transactional注释,添加@EnableTransactionManagement添加到您的配置中, 并希望您了解这一切是如何运作的。为了提供更深入的理解,这个 部分介绍了 Spring 框架的声明式事务的内部工作原理 基础设施。spring-doc.cadn.net.cn

关于 Spring 框架的声明式,需要掌握的最重要的概念 事务支持是通过 AOP 代理启用的,并且事务 通知由元数据驱动(目前基于 XML 或 Comments)。AOP 的组合 生成一个 AOP 代理,该代理使用TransactionInterceptor在 与适当的TransactionManager推动交易的实施 围绕方法调用。spring-doc.cadn.net.cn

Spring AOP 在 AOP 部分介绍。

Spring 框架的TransactionInterceptor提供事务管理 命令式和反应式编程模型。拦截器检测到所需的 transaction management 来检查方法返回类型。返回响应式 类型,例如Publisher或 KotlinFlow(或这些的子类型)符合 Reactive 的条件 事务管理。所有其他返回类型,包括void使用 代码路径 命令式事务管理。spring-doc.cadn.net.cn

事务管理风格会影响所需的事务管理器。祈使的 事务需要PlatformTransactionManager,而反应式事务使用ReactiveTransactionManager实现。spring-doc.cadn.net.cn

@Transactional通常与由PlatformTransactionManager,将事务公开给 当前执行线程。注意:这不会传播到新启动的线程 在方法中。spring-doc.cadn.net.cn

ReactiveTransactionManager使用 Reactor 上下文 而不是线程本地属性。因此,所有参与的数据都可以访问 作需要在同一反应式管道的同一 Reactor 上下文中执行。spring-doc.cadn.net.cn

当配置了ReactiveTransactionManager、所有事务划分的方法 应返回一个反应式管道。void 方法或常规返回类型需要 与常规PlatformTransactionManager,例如,通过transactionManager相应@Transactional声明。spring-doc.cadn.net.cn

下图显示了在事务代理上调用方法的概念视图:spring-doc.cadn.net.cn

TX 系列