Transaction Managament(事务管理二、Spring事务)

Spring事务框架的优势

​ Spring事务框架将开放过程中事务管理相关的关注点进行了分离,对这些关注点进行了抽象分离。通过Spring框架我们只要按照统一的事务模型,不需要关心所使用的数据资源访问技术以及要访问什么类型的数据资源;并且,spring事务框架与spring提供的数据访问支持可以紧密结合;最主要的是,结合SpringAOP框架,Spring事务框架为我们带来了声名式事务管理,无需绑定到任何应用服务器上。

基本原则

​ 让事务管理的关注点与数据访问的关注点分离

  • 当业务层使用事务的抽象API进行事务界定的时候,不需要关系事务将作用到什么样的数据资源,对数据资源的管理将由相应的框架实现类来操心

  • 当数据访问层对可能参与事务的数据资源进行访问的时候,只需要使用相应的数据API对数据访问即可,不需要关心被访问的数据资源如何参与或是否参与事务,这些将由事务框架类来操心

    *对开发人员来说,唯一需要关心的就是通过抽象后的事务管理API进行事务的界定*

Spring事务框架原型代码学习

  • 核心接口

  • 主要接口简单介绍

    • PlatformTransactionManager : 负责界定事务边界。
    • TransactionDefinition:负责定义事务相关属性(级别,传播行为)。
    • TransactionStatus:负责事务生命周期的状态;对事务进行有限控制的介质

主要接口详细介绍

  • TransactionDefinition 该接口定义的事务属性有:

    • 事务的隔离级别(Isolation) ( [.aɪsə'leɪʃ(ə)n])
    • 事务的传播行为(Propagation Behavior) ([ˌprɒpə'ɡeɪʃ(ə)n] ) ([bɪ'heɪvjər])
    • 事务的超时时间(TimeOut)
    • 是否为只读事务(ReadOnly)
  1. TransactionDefinition内定义了5个常量用于标志可供选择的隔离级别。

    • ISOLATION_DEFAULT:数据库默认隔离级别,通常为Read Committed
    • ISOLATION_READ_UNCOMMITTED
    • ISOLATION_READ_COMMITTED
    • ISOLATION_REPEATABLE_READ
    • ISOLATION_SERIALIZABLE
  2. 事务的传播行为(我们将在声名式事务中更多的依赖该属性)

    • 概念:整个事务处理过程中所跨越的业务对象将以什么样的行为参与事务。

    • 针对事务的传播行为,TransactionDefinition提供了以下几种方式

      • PROPAGATION_REQUIRED:如果当前存在一个事务,则加入。否则,创建一个新的事务。通常作为默认的事务传播行为
      • PROPAGATION_SUPPORTS:如果当前存在一个事务,则加入。否则,直接执行。
      • PROPAGATION_MANDATORY:强制要求当前必须有事务,否则抛出异常。(如果某个方法支持事务,但自身又不管理事务的提交或回滚,则适合采用此传播行为)
      • PROPAGATION_REQUIRES_NEW:不管当前是否存在事务,都将创建新的事务。如果当前存在事务,则将该事务挂起(suspend)。(适合场景:自身业务需要事务支持,但又不希望自身的提交或回滚影响到外层业务。)
      • PROPAGATION_NOT_SUPPORTED:不支持当前事务,在没有事务的情况下执行。如果当前存在事务,当前事务原则上需要挂起。
      • PROPAGATION_NEVER:永远不需要当前存在事务,否则抛出异常。
      • PROPAGATION_NESTED:如果当前存在事务A,则再创建一个A的内部子事务B(此时B也称作A的嵌套事务(sub-transaction));在B的整个生命周期内,A将处于活跃状态,不会被挂起,如果B回滚,会影响外层事务A同样回滚。如果当前不存在事务,则创建事务并在其中执行。

      • TransactionStatus 定义表示整个事务处理过程中的事务状态。具体我们可以使用它完成以下工作:

        • 使用它提供的方法查询事务状态
        • 通过setRollbackOnly()方法标记当前事务,以使其回滚。
        • 如果相应的PlatformTransactionManager支持Savepoint,可以通过transactionStatus创建内部事务。

        ​ (Spring事务框架内部主要使用的实现类是:DefaultTransactionStatus)

      • PlatforTransactionManager

        ​ PlatformTransactionManager整个抽象体系基于Strategy模式(策略模式)。由它对事务的界定做出进行统一抽象,而具体的界定策略则交由实现类实现。

Transaction Managament(事务管理二、Spring事务)的更多相关文章

  1. 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)

    一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...

  2. 事务之二:spring事务(事务管理方式,事务5隔离级别,7个事务传播行为,spring事务回滚条件)

    事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性. spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或 ...

  3. 二十 Spring的事务管理及其API&事务的传播行为,编程式&声明式(xml式&注解式,底层AOP),转账案例

    Spring提供两种事务方式:编程式和声明式(重点) 前者需要手写代码,后者通过配置实现. 事务的回顾: 事务:逻辑上的一组操作,组成这组事务的各个单元,要么全部成功,要么全部失败 事务的特性:ACI ...

  4. Spring事务管理——其他的事务属性

    之前我们说过Spring事务管理中的事务的传播行为的属性.下面我们来说一下它的其他属性. 一.事务的隔离级别 1 .数据库事务并发问题.假设现在有两个事务:Transaction01和Transact ...

  5. 程序员笔记|Spring IoC、面向切面编程、事务管理等Spring基本概念详解

    一.Spring IoC 1.1 重要概念 1)控制反转(Inversion of control) 控制反转是一种通过描述(在java中通过xml或者注解)并通过第三方去产生或获取特定对象的方式. ...

  6. 关系型数据库工作原理-事务管理(二)(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

  7. spring事务管理——编程式事务、声明式事务

    本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本教程假定您已经掌握了 ...

  8. Spring的事务管理和数据库事务相关知识

    1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱.         比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱. ...

  9. spring boot开启事务管理,使用事务的回滚机制,使两条插入语句一致

    spring boot 事务管理,使用事务的回滚机制 1:配置事务管理 在springboot 启动类中添加 @EnableTransactionManagement //开启事务管理 @Enable ...

随机推荐

  1. texlive 安装

    texlive 可以从下面两个网址下载 https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/ https://mirror ...

  2. 使用loadrunner监控apcahe资源

    一般要修改的内容在Httpd.conf文件中已经存在,如果不存在请自行添加相应内容. (1)修改Apache中Httpd.conf文件, (2)添加ExtendedStatus,设置ExtendedS ...

  3. STM32学习笔记:IIC通信协议详解(附带软件模拟源码)

    什么是IIC(I2C)? IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司设计出来的一种简单.双向.二线制.同步串行总线.它是一种多向控制总 ...

  4. mac下添加环境变量

    1.环境变量相关文件说明: a. /etc/profile b. /etc/paths c. ~/.bash_profile d. ~/.bash_login e. ~/.profile f. ~/. ...

  5. Swift 语法糖then

    then是一个swift初始化库,只有80几行的代码库,确可以让初始化变得很优雅. 1.使用then初始化AnyObject,这里以初始化控件为例 lazy var label = UILabel() ...

  6. VUE - mapState 辅助函数(简化)

    1,第一种 <template>   <div id="app">     <p> {{count}} </p>     <p ...

  7. R 再也不用愁变量太多跑回归太麻烦!R语言循环常用方法总结

    在高维数据分析过程中,为了筛选出与目标结局相关的变量,通常会用到回归分析,但是因为自变量较多,往往要进行多次回归.这就是统计编程语言发挥作用的时候了 有些大神们认为超过3次的复制粘贴就可以考虑使用循环 ...

  8. synchronized wait notify 生产者消费者

    1.生产者消费者模型 public class ProducterConsumerTest{ public static void main(String[] args){ System.out.pr ...

  9. html5移动端主流适配方案

    1.流式布局(百分比布局)    案例:京东移动端 优点:简单方便,只需要固定高度,宽度自适应: 缺点:大屏幕手机实际显示的不协调. 2.响应式布局 优点:可以节约成本,不用再做专门的web app网 ...

  10. 十六、React 渲染数据注意事项、以及react-router4.x中使用js跳转路由(登录成功自动跳转首页)

    一.React加载数据流程回顾 先看上一节的产品详情代码:https://blog.csdn.net/u010132177/article/details/103184176 [Pcontent.js ...