对于最新的稳定版本,请使用 Spring Framework 6.2.0! |
将资源与事务同步
如何创建不同的事务管理器以及它们如何链接到相关资源
需要同步到事务(例如同步到 JDBC 、 Hibernate 、
等等)现在应该很清楚了。本节介绍应用程序代码
(直接或间接,通过使用 JDBC、Hibernate 或 JPA 等持久性 API)
确保正确创建、重用和清理这些资源。该部分
还讨论了如何通过
相关。DataSourceTransactionManager
DataSource
HibernateTransactionManager
SessionFactory
TransactionManager
高级同步方法
首选方法是使用 Spring 最高级别的基于模板的持久性
集成 API,或者将本机 ORM API 与事务感知工厂 bean 一起使用,或者
用于管理本机资源工厂的代理。这些交易感知解决方案
内部处理资源创建和重用、清理、可选事务
资源的同步和异常映射。因此,用户数据访问代码
不必处理这些任务,但可以专注于非样板
持久化逻辑。通常,您使用原生 ORM API 或采用模板方法
用于 JDBC 访问。这些解决方案将在后续
部分。JdbcTemplate
低级同步方法
诸如 (for JDBC)、(for JPA)、(for Hibernate) 等类存在于较低级别。当您需要
应用程序代码直接处理本机持久性 API 的资源类型,
使用这些类来确保获得正确的 Spring Framework 托管实例,
事务是(可选)同步的,并且过程中发生的异常是
正确映射到一致的 API。DataSourceUtils
EntityManagerFactoryUtils
SessionFactoryUtils
例如,在 JDBC 的情况下,而不是传统的 JDBC 调用
的方法,你可以改用 Spring 的类,如下所示:getConnection()
DataSource
org.springframework.jdbc.datasource.DataSourceUtils
Connection conn = DataSourceUtils.getConnection(dataSource);
如果现有事务已经同步(链接)了连接,则
instance 返回。否则,方法调用会触发创建新的
连接,该连接(可选)与任何现有事务同步并进行
可在同一交易中供后续重用。如前所述,any 包装在 Spring Framework 中,一个
的 Spring 框架的未选中类型的层次结构中。这种方法
提供的信息比从 和 中轻松获得的信息要多
确保跨数据库甚至跨不同持久性技术的可移植性。SQLException
CannotGetJdbcConnectionException
DataAccessException
SQLException
这种方法也可以在没有 Spring 事务管理(事务 synchronization 是可选的),因此无论您是否使用 Spring 事务管理。
当然,一旦您使用了 Spring 的 JDBC 支持、JPA 支持或 Hibernate 支持,
您通常不喜欢使用 或其他帮助程序类
因为您通过 Spring 抽象工作比直接使用 Spring 抽象要高得多
使用相关的 API。例如,如果使用 Spring 或 package 来简化 JDBC 的使用,则会进行正确的连接检索
在幕后,您无需编写任何特殊代码。DataSourceUtils
JdbcTemplate
jdbc.object
TransactionAwareDataSourceProxy
在最低级别存在类。这是一个
代理 ,它包装目标以添加对
Spring 管理的事务。在这方面,它类似于 Jakarta EE 服务器提供的事务性 JNDI 。TransactionAwareDataSourceProxy
DataSource
DataSource
DataSource
您几乎永远不需要或不想使用此类,除非存在
code 必须调用并传递标准 JDBC 接口实现。在
在这种情况下,此代码可能可用,但参与 Spring 管理
交易。您可以使用更高级别的
abstractions 的DataSource