事务管理
全面的交易支持是使用Spring框架最令人信服的理由之一。Spring框架提供了统一的交易管理抽象,能够带来以下好处:
以下部分将描述Spring框架的事务特性和技术:
-
Spring框架事务支持模型的优势 描述了为什么选择使用Spring框架的事务抽象机制,而不是EJB容器管理的事务(CMT),或者通过专有的API来驱动事务。
-
理解Spring框架的事务抽象 概述了核心类,并介绍了如何从多种来源配置和获取
DataSource实例。 -
利用事务同步资源 描述了应用程序代码如何确保资源的正确创建、重用和清理。
-
声明式事务管理 介绍了对声明式事务管理的支持。
-
编程式事务管理 涵盖了对编程式(即显式编码)事务管理的支持。
-
与事务绑定的事件 描述了如何在事务中使用应用程序事件。
部分总结
📄️ Spring框架事务支持模型的优势
传统上,EE(Enterprise Edition)应用开发人员在事务管理方面有两种选择:全局事务和本地事务,但这两种方式都存在显著的局限性。接下来的两个部分将分别讨论全局事务和本地事务管理,随后会探讨Spring框架的事务管理支持是如何解决这些局限性的。
📄️ 理解Spring框架的事务抽象
Spring事务抽象的关键在于“事务策略”(transaction strategy)这一概念。事务策略由TransactionalManager来定义,具体来说,对于命令式事务管理(imperative transaction management),使用的是org.springframework.transaction.PlatformTransactionManager接口;而对于反应式事务管理(reactive transaction management),则使用org.springframework.transaction.ReactiveTransactionManager接口。以下是PlatformTransactionManager API的定义:
📄️ 通过事务同步资源
如何创建不同的事务管理器,以及这些事务管理器如何与需要与事务同步的相关资源(例如DataSourceTransactionManager与JDBC DataSource的关联、HibernateTransactionManager与Hibernate SessionFactory的关联等)相连接,现在应该已经清晰明了。本节将介绍应用程序代码(无论是直接还是间接地,通过使用JDBC、Hibernate或JPA等持久化API)如何确保这些资源能够被正确地创建、重用和清理。此外,本节还讨论了如何(可选地)通过相关的事务管理器来触发事务同步。
🗃️ 声明式事务管理
9 个项目
📄️ 程序化事务管理
Spring框架提供了两种通过编程方式管理事务的方法,具体如下:
📄️ 在程序化事务管理(Programmatic Transaction Management)与声明式事务管理(Declarative Transaction Management)之间做出选择
仅当你有少量的事务操作时,编程式事务管理通常才是一个好主意。例如,如果你有一个Web应用程序,只需要在某些更新操作上使用事务,那么你可能不希望通过使用Spring或其他任何技术来设置事务代理。在这种情况下,使用TransactionTemplate可能是一个不错的方法。能够明确地设置事务名称也是只有通过编程式事务管理方法才能实现的功能。
📄️ 事务绑定事件
从Spring 4.2开始,事件的监听器可以被绑定到事务的某个阶段。一个典型的例子是在事务成功完成时处理该事件。这样做可以让事件在当前事务的结果对监听器真正重要的情况下被更加灵活地使用。
📄️ 应用服务器特定集成
Spring的事务抽象通常是与应用服务器无关的。此外,Spring的JtaTransactionManager类(该类可以选择通过JNDI来查找JTA UserTransaction和TransactionManager对象)能够自动检测后者的位置,而这一位置因应用服务器的不同而有所差异。能够访问JTA TransactionManager可以增强事务语义——特别是支持事务挂起功能。详情请参阅JtaTransactionManager的Java文档。
📄️ 常见问题解决方案
本节描述了一些常见问题的解决方案。
📄️ 更多资源
有关Spring框架事务支持的更多信息,请参阅: