事务管理
全面的事务支持是使用 Spring 框架的最具吸引力的原因之一。Spring 框架为事务管理提供了一种一致的抽象,带来了以下好处:
以下部分描述了 Spring Framework 的事务功能和技术:
-
Spring 框架事务支持模型的优势 描述了为什么要使用 Spring 框架的事务抽象,而不是 EJB 容器管理事务 (CMT) 或选择通过专有 API 驱动事务。
-
理解 Spring 框架的事务抽象 概述了核心类,并描述了如何从各种来源配置和获取
DataSource
实例。 -
将资源与事务同步 描述了应用程序代码如何确保资源的创建、重用和正确清理。
-
声明式事务管理 描述了对声明式事务管理的支持。
-
编程式事务管理 涵盖了对编程式(即显式编码)事务管理的支持。
-
事务绑定事件 描述了如何在事务中使用应用程序事件。
章节摘要
📄️ Spring 框架事务支持模型的优势
传统上,EE 应用程序开发人员在事务管理方面有两个选择:全局事务或本地事务,这两者都有深刻的局限性。全局和本地事务管理将在接下来的两个部分中进行回顾,随后将讨论 Spring Framework 的事务管理支持如何解决全局和本地事务模型的局限性。
📄️ 理解 Spring 框架事务抽象
Spring 事务抽象的关键是事务策略的概念。事务策略由一个 TransactionManager 定义,具体来说是用于命令式事务管理的 org.springframework.transaction.PlatformTransactionManager 接口和用于反应式事务管理的 org.springframework.transaction.ReactiveTransactionManager 接口。以下列表显示了 PlatformTransactionManager API 的定义:
📄️ 使用事务同步资源
如何创建不同的事务管理器以及它们如何链接到需要与事务同步的相关资源(例如,DataSourceTransactionManager 到 JDBC DataSource,HibernateTransactionManager 到 Hibernate SessionFactory 等)现在应该很清楚了。本节描述了应用程序代码(直接或间接地,通过使用诸如 JDBC、Hibernate 或 JPA 之类的持久化 API)如何确保这些资源被正确地创建、重用和清理。本节还讨论了如何通过相关的 TransactionManager(可选地)触发事务同步。
🗃️ 声明式事务管理
9 个项目
📄️ 程序化事务管理
Spring 框架提供了两种编程式事务管理的方法,通过使用:
📄️ 在程序化和声明式事务管理之间进行选择
程序化事务管理通常只有在事务操作数量较少时才是一个好主意。例如,如果你有一个 Web 应用程序只需要对某些更新操作进行事务处理,你可能不想使用 Spring 或其他技术来设置事务代理。在这种情况下,使用 TransactionTemplate 可能是一个不错的方法。能够显式设置事务名称也是只有通过程序化事务管理方法才能做到的事情。
📄️ 事务绑定事件
从 Spring 4.2 开始,事件的监听器可以绑定到事务的某个阶段。一个典型的例子是当事务成功完成时处理事件。这样做可以让事件在当前事务的结果对监听器确实重要时,具有更大的灵活性。
📄️ 应用服务器特定集成
Spring 的事务抽象通常与应用服务器无关。此外,Spring 的 JtaTransactionManager 类(可以选择性地对 JTA 的 UserTransaction 和 TransactionManager 对象执行 JNDI 查找)会自动检测后者对象的位置,这在不同的应用服务器中是不同的。访问 JTA TransactionManager 可以实现增强的事务语义——特别是支持事务挂起。详情请参见 JtaTransactionManager 的 javadoc。
📄️ 常见问题的解决方案
本节介绍了一些常见问题的解决方案。
📄️ 更多资源
有关 Spring Framework 事务支持的更多信息,请参见: