Spring事务管理

一,回顾事务
        1.1什么是事务?
            在数据库开发中,一组业务逻辑(ABCD)操作,要么全部成功,要么全部失败
            
        1.2事务有什么特定?ACID
            原子性:整体,原子不可分割。整个操作被看成一个整体,要么全部成功,要么全部失败
            一致性:数据,事务操作的前后数据一致
            隔离性:并发,两个事务之间并发访问情况
            持久性:结果,事务一旦提交,不能回滚
            
        1.3隔离有什么问题?
            脏读:一个事务读到了另一个事务没有提交的数据
            不可重复读:一个事务读到了另一个事务已提交的数据(update)
            幻读:一个事务读到了另一个事务已提交的数据(insert)
            
        1.4隔离级别有哪些?
            读未提交( read uncommitted)
                一个事务读到了另一个事务,没有提交的数据
                存在3个问题,解决0个问题
            读已提交(read committed)
                一个事务读到了另一个事务,已经提交的数据
                存在2个问题,解决一个问题(脏读)
            可重复读(repeatable read )
                一个事务中读到的数据重复的
                存在1个问题,解决2个问题(脏读、不可重复读)
            串行化(serializable)
                单事务,没有并发
                存在0个问题,解决3个问题(脏读、不可重复读、幻读)
                
                
        1.5对比:速度、安全
        速度  read uncommitted  >  read committed  >  repeatable read  >  serializable
        安全  read uncommitted  < read committed  <  repeatable read  <  serializable
        
        
        ps:
        MySQL默认隔离级别:repeatable read 
        Oracle默认隔离级别: read committed
        
    二,事务详情
        2.1研究Spring事务,需要学习事务管理平台管理器:PlatformTransactionManager
            在平台管理器中,通过`事务的定义`获得事务,从而进行事务提交或回滚操作
            
        2.2事务定义 TransactionDefinition 的详解:


        
            
        2.3传播行为:一个事务调用另一个事务,事务共享问题
            2.3.1 PROPAGATION_REQUIRED,required:支持当前事务,如果没有事务,创建一个新的。

 

                    A 有事务,B使用A的事务。(支持当前事务)

                    A没有事务,B创建新的。()

            2.3.2 PROPAGATION_SUPPORTS,supports:支持当前事务,如果没有事务,以非事务执行。

                    A 有事务,B使用A的事务。(支持当前事务)

                    A没有事务,B以非事务执行。

            2.3.3 PROPAGATION_MANDATORY,mandatory:支持当前事务,如果没有事务,抛异常

                    A 有事务,B使用A的事务。(支持当前事务)

                    A没有事务,B抛异常。

            2.3.4 PROPAGATION_REQUIRES_NEW,requires_new:创建一个新事物,如果当前有事务,将挂起。

                    A 有事务,B创建新事务,同时挂起A事务。

                    A 没有事务,B创建新事务。

            2.3.5 PROPAGATION_NOT_SUPPORTED, not_supported:不支持当前事务,以非事务执行,如果有挂起

                    A 有事务,B以非事务执行,同时挂起A事务。

                    A 没有事务,B以非事务执行。

            2.3.6 PROPAGATION_NEVER, never:不支持当前事务,如果有抛异常。

                    A 有事务,B抛异常

                    A 没有事务,B以非事务执行。

            2.3.7 PROPAGATION_NESTED, nested :嵌套事务,底层使用`savepoint`进行嵌套事务操作。

                  保存点允许回顾部分事务。
三,事务基本操作
        编写配置类:
                    使用DataSourceTransactionManager 将DataSource交给事务管理器。
                    开始事务管理:@EnableTransactionManagement
                    在业务service层进行事务管理:
                    通过 @Transactional进行事务管理
                    相当于进行`事务定义 TransactionDefinition` 的描述
四,事务高级配置
        @Transactional注解可以描述事务定义,一般情况默认值最常用

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值