spring 将事务管理委托给底层具体的持久化实现框架去完成,所以 Spring 为不同的持久化实现类,都提供了 PlatformTransactionManager 接口的实现类。

事务 说明
org.springframework.orm.jpa.JpaTransactionManager JPA 事务管理器。
org.springframework.orm.hibernateX.HibernateTransactionManager HibernateX (X 为 3,4,5) 事务管理器。
org.springframework.jdbc.datasource.DataSourceTransactionManager SpringJDBC 或 MyBatis 等基于 DataSource 数据源的事务管理器。
org.springframework.orm.jdo.JdoTransactionManager JDO 事务管理器。
org.springframework.transaction.jta.JtaTransactionManager 多个数据源的全局事务管理器。

1 Spring JDBC 和 MyBatis

因为 Spring JDBC 和 MyBatis 都是基于数据源的 Connection 来访问数据库,所有都可以使用 DataSourceTransactionManager,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置数据源 --><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"p:driverClassName="${jdbc.driverClassName}"p:url="${jdbc.url}"p:username="${jdbc.username}"p:password="${jdbc.password}"/><!--  Spring JDBC 和 MybBatis 等基于数据源的事务管理器--><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"p:dataSource-ref="dataSource"/>
</beans>
复制代码

DataSourceTransactionManager 会使用 Connection 的 commit()rollback() 等方法,来管理事务。

2 JPA

JPA 会通过 javax.persistence.EntityTransaction 来管理事务。 因为在底层,JPA 也是通过 JDBC 的 Connection 来完成事务的最终控制的,所以必须先提供一个 DataSource ,然后再配置一个 EntityManagerFactory ,最后配置 JpaTransationManager。

    <!-- JPA 实体管理工厂--><bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"p:dataSource-ref="dataSource"/><!--JPA 事务管理器--><bean id="transactionManager"class="org.springframework.orm.jpa.JpaTransactionManager"p:entityManagerFactory-ref="entityManagerFactory"/>
复制代码

3 Hibernate

Spring 4+ 只对 Hibernate 3.6+ 提供事务管理器的支持,这里以 Hibernate 5 为例:

<!--  Hibernate 5 Session 工厂--><bean id="sessionFactory"class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"p:dataSource-ref="dataSource"p:mappingResources="classpath:xx.hbm.xml"><!-- Hibernate 属性--><property name="hibernateProperties"><props><!-- 数据库方言--><prop key="hibernate.dialect">${hibernate.dialect}</prop><!-- 是否显示生成的 SQL 语句--><prop key="hibernate.show_sql">true</prop><!-- 性能统计开关--><prop key="hibernate.generate_statistics">true</prop></props></property></bean><!--Hibernate 事务管理器--><bean id="transactionManager"class="org.springframework.orm.hibernate5.HibernateTransactionManager"p:sessionFactory-ref="sessionFactory"/>
复制代码

Hibernate 通过 org.hibernate.Session 封装了 Connection,所以这里需要先配置 sessionFactory。

4 JTA

JTA 是通过 JNDI 和 JtaTransactionManager 来获取由 Java EE 容器来管理的 DataSource。在此,JtaTransactionManager 引用的是容器所提供的全局事务管理:

<!-- Java EE 容器多数据源--><jee:jndi-lookup jndi-name="java:comp/env/xx1"/><jee:jndi-lookup jndi-name="java:comp/env/xx2"/><!-- JTA  事务管理器--><bean id="transactionManager"class="org.springframework.transaction.jta.JtaTransactionManager"/>
复制代码

转载于:https://juejin.im/post/5c96ec075188252d89136e20

说说 Spring 事务管理的实现类相关推荐

  1. Spring DAO(3):Spring 事务管理

    Spring 对于事务管理的支持 关于事务管理的基本概念,查看 http://blog.csdn.net/al_assad/article/details/78808820 JDBC 底层已经提供了对 ...

  2. Spring事务管理 与 SpringAOP

    1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略.  ...

  3. 什么是事务的传播_这么漂亮的Spring事务管理详解,你不来看看?

    事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...

  4. Spring 事务管理高级应用难点剖析

    Spring 事务管理高级应用难点剖析: 第 1 部分 http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts1/index.html htt ...

  5. spring事务管理 TransactionProxyFactoryBean源码分析

    J2EE,当然离不开事务,事务又当然少不了Spring声明式事务.spring声明式事务,很多码农门,应该和笔者一样,停留在使用上,及仅仅了解点原理.如:Spring事务管理原理"代理+AO ...

  6. Spring 事务管理高级应用难点剖析--转

    第 1 部分 http://www.ibm.com/search/csass/search/?q=%E4%BA%8B%E5%8A%A1&sn=dw&lang=zh&cc=CN& ...

  7. Spring事务管理(详解+实例)

    写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...

  8. 在Spring事务管理下,Synchronized为啥还线程不安全?

    在synchronized 锁住方法的情况下,竟然出现了脏写 Tips 昨天本来打算是准备着一支烟 一杯咖啡 一个bug写一天的,突然我们组长跟我们说线上环境报错了, 还出现了"服务器异常, ...

  9. 多数据源 事务管理_可能是最漂亮的Spring事务管理详解

    事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...

最新文章

  1. “ Error:(1, 1) java: 非法字符: ‘\ufeff‘ ”错误的解决方法
  2. 【Java并发编程】面试必备之线程池
  3. 每天一个JavaScript实例-获取元素当前高度
  4. java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密
  5. OpenGL6-纹理动画
  6. 兰州大学计算机调剂2020,兰州大学2020考研调剂公告
  7. 区块链中的基础数据结构
  8. el captain设置环境变量
  9. Android4.0源码目录结构详解
  10. POJ-2762 Going from u to v or from v to u?
  11. windows下的Redis安装:
  12. php 正则忽略空白,(PHP)正则表达式-忽略空白
  13. 集成电路哪家强?现在就为你透彻分析!
  14. 未知USB设备 端口重置失败
  15. 不懂不要炒股,一定要在调整时买入股票!
  16. jack分享的1-3开wifi 零火版本智能开关解决方案
  17. 计算机三级数据库技术——第一章 数据库应用系统开发方法学习笔记
  18. 浮点数单双精度输出位数
  19. 互联网时代,企业经营管理面临的挑战有哪些?
  20. [附源码]SSM计算机毕业设计宠物医院管理系统JAVA

热门文章

  1. FTP 主动、被动工作模式
  2. leetcode算法题--Bulls and Cows
  3. android studio3.0升级,升级androidStudio3.0的问题
  4. HDU-1069-Monkey and Banana
  5. Day18 (二)反射
  6. 使用python获取路径问题
  7. Log4j扩展使用--自定义输出
  8. U盘中的autorun.inf
  9. 多备份cloud 5技术:传统数据备份思路的完美移植
  10. Web 开发中很实用的10个效果【附源码下载】