Spring事务管理

作者: 熊猫读书营 | 来源:发表于2018-04-10 21:02 被阅读13次

    事务的概念

    首先来回顾一下什么是事务?
    事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。
    举个例子,假设张三和李四两人之间要进行转账操作----张三要给李四转账1000元。那么这个转账操作就有下面两个步骤:
    ①修改张三账户,扣除1000元②修改李四账户,增加1000元。
    显然在这个过程中,不允许出现步骤①完成后整个操作就终止的情况。要想让这两个步骤能一起完成或一起失败的话,就要对其加上事务管理。

    事务的特性

    事务有如下4个特性:原子性、一致性、隔离性、永久性。
    ①原子性指事务是一个不可分割的基本单位,一组操作要么都发生,要么都不发生。
    ②一致性指事务完成前后的数据要保持一致,比如转账操作中事务完成前后的总钱数不能发生改变。
    ③隔离性指多个用户并发访问时,每一个事务都是相互独立的,不能被其他事务所干扰。
    ④永久性指事务一旦被提交,就真正的被修改了,无法改变撤回。

    Spring事务接口

    Sring事务管理主要提供了三个接口:
    ①事务管理器 PlatformTransactionManager
    ②事务定义信息 TransactionDefinition
    ③事务运行状态 TransactionStatus

    简单的写一下这三种接口的功能:
    1)PlatformTransactionManager
    Spring在该接口中为不同的持久化框架提供了不同的PlatformTransactionManager接口实现类,事务的提交、回滚等操作全部交给它来实现。

    2)TransactionDefication
    该接口中定义了一些事务的隔离级别、超时信息、传播行为等常量和方法。
    之所以要定义隔离级别是因为如果不考虑事务的隔离性,就可能会引发一系列安全问题,比如脏读,不可重复读,幻读等。
    (脏读指一个事务读取了另一个事务改写了但还未提交的数据时,此时如果这些数据被回滚了,则读到的数据就会是无效的。
    不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。幻读指的是一个事务读取了几行记录之后,另一个事务插入了一些记录,此时幻读就发生了)

    隔离级别就是用来解决上面几种问题的。

    Spring为事务提供了四种隔离级别:
    此外该接口中还定义了Spring事务的传播行为。传播行为是用来解决业务层中多个方法之间的相互调用的问题,用来决定事务是如何进行传递的。
    有七种传播行为:

    3)TransactionStatus
    事务状态的接口,该接口中提供了一组方法,可以获得事物的状态信息,比如事务是否开启,事务是否已完成,是否为一个新事物等等。

    事务管理方式

    Spring支持两种方式管理事务
    ①编程式的事务管理
    该方式是要手动来写代码进行事务管理,较少使用。
    ②使用xml配置的声明式事务
    Spring的声明式事务是通过AOP来实现的,开发中推荐使用此种方式,代码的侵入性较小。



    微信公众号【IT资源社】
    本公众号致力于免费分享全网最优秀的视频资源,学习资料,面试经验等,前端,PHP,JAVA,算法,Python,大数据等等,你想要的这都有,还会分享优质博文,提高你的认知与思维

    IT资源社-QQ交流群:625494093
    要进微信交流群的话加微信:super1319164238
    微信搜索公众号:IT资源社 或者扫描下方二维码直接关注,


    原创文章,转载请注明出处

    相关文章

      网友评论

        本文标题:Spring事务管理

        本文链接:https://www.haomeiwen.com/subject/chsnhftx.html