说说 Spring 事务管理的实现类
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 事务管理的实现类相关推荐
- Spring DAO(3):Spring 事务管理
Spring 对于事务管理的支持 关于事务管理的基本概念,查看 http://blog.csdn.net/al_assad/article/details/78808820 JDBC 底层已经提供了对 ...
- Spring事务管理 与 SpringAOP
1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略. ...
- 什么是事务的传播_这么漂亮的Spring事务管理详解,你不来看看?
事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...
- Spring 事务管理高级应用难点剖析
Spring 事务管理高级应用难点剖析: 第 1 部分 http://www.ibm.com/developerworks/cn/java/j-lo-spring-ts1/index.html htt ...
- spring事务管理 TransactionProxyFactoryBean源码分析
J2EE,当然离不开事务,事务又当然少不了Spring声明式事务.spring声明式事务,很多码农门,应该和笔者一样,停留在使用上,及仅仅了解点原理.如:Spring事务管理原理"代理+AO ...
- Spring 事务管理高级应用难点剖析--转
第 1 部分 http://www.ibm.com/search/csass/search/?q=%E4%BA%8B%E5%8A%A1&sn=dw&lang=zh&cc=CN& ...
- Spring事务管理(详解+实例)
写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...
- 在Spring事务管理下,Synchronized为啥还线程不安全?
在synchronized 锁住方法的情况下,竟然出现了脏写 Tips 昨天本来打算是准备着一支烟 一杯咖啡 一个bug写一天的,突然我们组长跟我们说线上环境报错了, 还出现了"服务器异常, ...
- 多数据源 事务管理_可能是最漂亮的Spring事务管理详解
事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...
最新文章
- “ Error:(1, 1) java: 非法字符: ‘\ufeff‘ ”错误的解决方法
- 【Java并发编程】面试必备之线程池
- 每天一个JavaScript实例-获取元素当前高度
- java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密
- OpenGL6-纹理动画
- 兰州大学计算机调剂2020,兰州大学2020考研调剂公告
- 区块链中的基础数据结构
- el captain设置环境变量
- Android4.0源码目录结构详解
- POJ-2762 Going from u to v or from v to u?
- windows下的Redis安装:
- php 正则忽略空白,(PHP)正则表达式-忽略空白
- 集成电路哪家强?现在就为你透彻分析!
- 未知USB设备 端口重置失败
- 不懂不要炒股,一定要在调整时买入股票!
- jack分享的1-3开wifi 零火版本智能开关解决方案
- 计算机三级数据库技术——第一章 数据库应用系统开发方法学习笔记
- 浮点数单双精度输出位数
- 互联网时代,企业经营管理面临的挑战有哪些?
- [附源码]SSM计算机毕业设计宠物医院管理系统JAVA