此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

将资源与事务同步

如何创建不同的事务管理器以及它们如何链接到相关资源 需要同步到事务(例如DataSourceTransactionManager到 JDBCDataSource,HibernateTransactionManager更改为 HibernateSessionFactory, 等等)现在应该很清楚了。本节介绍应用程序代码 (直接或间接,通过使用 JDBC、Hibernate 或 JPA 等持久性 API) 确保正确创建、重用和清理这些资源。该部分 还讨论了如何通过 相关TransactionManager.spring-doc.cadn.net.cn

高级同步方法

首选方法是使用 Spring 最高级别的基于模板的持久性 集成 API,或者将本机 ORM API 与事务感知工厂 bean 一起使用,或者 用于管理本机资源工厂的代理。这些交易感知解决方案 内部处理资源创建和重用、清理、可选事务 资源的同步和异常映射。因此,用户数据访问代码 不必处理这些任务,但可以专注于非样板 持久化逻辑。通常,您使用原生 ORM API 或采用模板方法 对于 JDBC 访问,请使用JdbcTemplate.这些解决方案将在后续 部分。spring-doc.cadn.net.cn

低级同步方法

类,例如DataSourceUtils(对于 JDBC)、EntityManagerFactoryUtils(对于 JPA)、SessionFactoryUtils(对于 Hibernate),等等存在于较低的级别。当您需要 应用程序代码直接处理本机持久性 API 的资源类型, 使用这些类来确保获得正确的 Spring Framework 托管实例, 事务是(可选)同步的,并且过程中发生的异常是 正确映射到一致的 API。spring-doc.cadn.net.cn

例如,在 JDBC 的情况下,而不是传统的 JDBC 调用 这getConnection()方法上的DataSource,您可以改用 Spring 的org.springframework.jdbc.datasource.DataSourceUtils类,如下所示:spring-doc.cadn.net.cn

Connection conn = DataSourceUtils.getConnection(dataSource);

如果现有事务已经同步(链接)了连接,则 instance 返回。否则,方法调用会触发创建新的 连接,该连接(可选)与任何现有事务同步并进行 可在同一交易中供后续重用。如前所述,任何SQLException包装在 Spring 框架中CannotGetJdbcConnectionException一 Spring 框架的层次结构的 uncheckedDataAccessException类型。这种方法 提供的信息比从SQLException和 确保跨数据库甚至跨不同持久性技术的可移植性。spring-doc.cadn.net.cn

这种方法也可以在没有 Spring 事务管理(事务 synchronization 是可选的),因此无论您是否使用 Spring 事务管理。spring-doc.cadn.net.cn

当然,一旦您使用了 Spring 的 JDBC 支持、JPA 支持或 Hibernate 支持, 您通常不喜欢使用DataSourceUtils或其他帮助程序类 因为您通过 Spring 抽象工作比直接使用 Spring 抽象要高得多 使用相关的 API。例如,如果您使用 SpringJdbcTemplatejdbc.objectpackage 来简化 JDBC 的使用,则会发生正确的连接检索 在幕后,您无需编写任何特殊代码。spring-doc.cadn.net.cn

TransactionAwareDataSourceProxy

在最低级别存在TransactionAwareDataSourceProxy类。这是一个 目标的代理DataSource,它将目标DataSource要添加对 Spring 管理的事务。在这方面,它类似于事务性 JNDIDataSource,由 Jakarta EE 服务器提供。spring-doc.cadn.net.cn

您几乎永远不需要或不想使用此类,除非存在 code 必须调用并传递标准 JDBCDataSourceinterface 实现。在 在这种情况下,此代码可能可用,但参与 Spring 管理 交易。您可以使用更高级别的 abstractions 的spring-doc.cadn.net.cn


APP信息