Spring事务管理的四个优点:

  1. 提供一致的对于不同的事务管理的API
  2. 支持声明式事务管理(重点)
  3. 编程事务管理(在开发中应用比较少)
  4. 优秀的整合与Spring的数据访问

我们重点讲解spring的事务管理的相关的API,还有声明式事务管理

Spring事务管理主要提供了三个接口来完成

  1. org.springframework.transaction.PlatformTransactionManager

    这是一个事务管理器,可以来选择相关的平台(jdbc hibernate jpa…)

  2. TransactionDefinition

    它定义事务的一些相关信息 例如 隔离 传播 超时 只读

  3. TransactionStatus

    它主要描述事务具体的运行状态

PlatformTransactionManager

平台事务管理器

在不同的持久化层解决技术它的事务代码不一样。

JDBC开发

Connection con=……;

con.setAutoCommit(false);//开启事务

con.rollback();

con.commit();

Hibernate开发

Session session=….;

Transaction t=session.beginTransaction();

t.commit();

t.rollback();

PlatformTransactionManager接口API

DataSourceTransactionManager 主要针对于JdbcTemplate开发 MyBatis开发

HibernateTransactionManasger主要针对于Hibernate开发

JpaTransactionManager 主要针对于JPA开发。

TransactionDefinition

它描述的是事务的定义信息。

在TransactionDefinition中定义了大量的常量

隔离

以下是关于隔离性相关信息

事务的四个特性 ACID 原子性 一致性 隔离性 持久性。

不考虑事务隔离性有什么问题?

脏读,不可重复读 虚读。

ISOLATION_DEFUALT 它使用后端数据库的默认隔离级别(spring中选项)

ISOLATION_READ_UNCOMMITTED 不能解决问题,会发生脏读 不可重复读 虚读

ISOLATION_READ_COMMITTED 可以解决脏读 会产生不可重复读与虚读。

ISOLATION_REPEATABLE_READ 可以解决脏读,不可重复读 解决不了虚读

ISOLATION_SERIALIZABLE 串行化,可以解决所有问题

对于不现的数据库,它的底层默认事务隔离级别不一样。

Oracle数据库它默认的是read_committed

Mysql数据库它默认的是repeatable_read.

超时

默认值是-1 它使用的是数据库默认的超时时间。

只读

它的值有两个true/false,如果选择true一般是在select操作时

传播

它解决的是两个被事务管理的方法互相调用问题。它与数据库没关系,是程序内部维护的问题。

以下定义了事务的传播行为

以上操作中最常用的三种:

PROPAGATION_REQUIRED 默认值 两个操作处于同一个事务,如果之前没有事务,新建一个事务

PROPAGATION_REQUIRES_NEW

两个操作处于不同的事务

PROPAGATION_NESTED
它是一种嵌套事务,它是使用SavePoint来实现的。事务回滚时可以回滚到指定的savepoint,注意:它只对DataSourceTransactionManager有作用

以下了解

PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务

PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常

PROPAGATION_NOT_SUPPORTED 以非事务运行,如果有事务存在,挂起当前事务

PROPAGATION_NEVER 以非事务运行,如果有事务存在,抛出异常

TransactionStatus

它定义了事务状态信息,在事务运行过程中,得到某个时间点的状态

声明式事务管理

事务管理方式

  1. 编码方案 不建议使用,它具有侵入性。在原有的业务代码基础上去添加事务管理代码
  2. 声明式事务控制,基于AOP对目标进行代理,添加around环绕通知。

    这种方案,它不具有侵入性,不需要修改原来的业务代码

基于xml配置声明式事务管理方案

第一步:在applicationContext.xml文件中添加aop与tx的名称空间

第二步:在applicationContext.xml文件中配置

Spring提供的advice是传统的spring advice

  1. 声明事务管理器

  2. 配置通知

    Spring为我们提供了一个TransactionInterceptor来完成增强

    对于这个增强,我们可以使用spring为我们提供的一个标签<tx:advice>来完成操作        

  3. 配置切面

    因为使用的是传统的spring的advice,需要使用<aop:advisor>

基于annotation声明式事务管理方案

可以使用@Transaction来在类或方法上添加声明式事务管理

注意:需要在applicationContext.xml文件中使用

相当于开启注解事务控制

问题:关于xml方式与annotation方式的优缺点?

从简单上来说,使用注解更方便。

使用配置的方案,可以对事务配置进行集中维护。

Spring事务管理机制相关推荐

  1. Spring 事务管理机制概述

    摘要: 一般地,用户的每次请求都对应一个业务逻辑方法,而一个业务逻辑方法往往包括一系列数据库原子访问操作,并且这些数据库原子访问操作应该绑定成一个事务来执行.然而,在使用传统的事务编程策略时,程序代码 ...

  2. Spring:事务管理的四大特性,事务管理机制

    1:认识事务 可以把一系列要执行的操作称为事务,而事务管理就是管理这些操作要么完全执行,要么完全不执行(很经典的一个例子是:A要给B转钱,首先A的钱减少了,但是突然的数据库断电了,导致无法给B加钱,然 ...

  3. Spring jdbc Template和Spring 事务管理

    使用jdbcTemplate完成增删改查操作(重点) package com.it.jdbctemplate;import java.util.List;import org.junit.Test; ...

  4. Spring入门5.事务管理机制

    Spring入门5.事务管理机制 20131126 代码下载 : 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 回顾之前的知识,Spring 最为核心的两个部分 ...

  5. Spring 框架基础(05):事务管理机制,和实现方式

    本文源码:GitHub·点这里 || GitEE·点这里 一.Spring事务管理 1.基础描述 Spring事务管理的本质就是封装了数据库对事务支持的操作,使用JDBC的事务管理机制,就是利用jav ...

  6. spring配置mysql事务管理_Spring 数据库事务管理机制

    要点1 Spring事务管理方法编程式事务(TransactionTemplate.PlatformTransactionManager) 声明式事务(配置式.注解式) 2 Spring 注解 @Tr ...

  7. 基于Spring中的事务管理机制

    什么是事务? 通俗理解,事务其实就是一系列指令的集合. 为什么要使用事务管理? 我们在实际业务场景中,经常会遇到数据频繁修改读取的问题.在同一时刻,不同的业务逻辑对同一个表数据进行修改,这种冲突很可能 ...

  8. Spring事务管理 与 SpringAOP

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

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

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

最新文章

  1. 基于群集的Hyper-v Server副本
  2. 10.2 梯度下降-机器学习笔记-斯坦福吴恩达教授
  3. 两段式状态机不可能完成的任务
  4. how is service url defined in configuration.js consumed
  5. [ARC073C] Ball Coloring(贪心)
  6. Mac电脑「空格键」的使用技巧
  7. 事件EVENT与waitforsingleobject的使用以及Mutex与Event的区别
  8. Python的list方法append和extend有什么区别?
  9. 程序结构程序设计(三) ——递归及递归举例
  10. easyUI 设置datagrid的行高 + 文字超宽换行
  11. 计算机函数填写评价,信息技术应用 用计算机画函数图象教学评价实录
  12. 学习笔记: cdq分治
  13. Visio 2019 专业版 下载地址
  14. bxl类型封装转换为AD库封装
  15. window.opener 与 window.dialogArguments的用法
  16. JAVA-CPU飙高问题排查
  17. 利用Google快讯和GoogleReader收集信息
  18. Excel如何快速验证银行卡号和姓名是否一致?
  19. 年纪大的程序员慢慢都流向什么地方去了?
  20. 修改arcgis infowindow 放大和缩小的模板

热门文章

  1. 每天被远程办公支配的恐惧,你怕了吗?
  2. 元宇宙大潮来袭?业内首个虚拟形象实时互动融合 SDK 来了!
  3. vue-自主研发非父子关系组件之间通信的问题
  4. javascript返回上一页的三种写法
  5. C算法编程题(一)扑克牌发牌
  6. 数据存储和云安全是选择云服务的关键
  7. Windows Server 2008十大新功能
  8. 【python自动化办公03】word操作-文档内容替换
  9. 【Python】洛谷 P1175_表达式的转换(逆波兰式、中缀表达式、后缀表达式、栈)
  10. MongoDB中如何优雅地删除大量数据