Spring事务隔离级别和传播行为

一,Spring事务隔离级别

      Spring事务隔离级别是按照数据库的隔离级别来定义的,即也包括读未提交,读提交,可重复读,串行化这四种;

      如果没有设置也是按照数据库底层默认隔离级别来的,mysql默认隔离级别是可重复读,sqlserver和oracle默认隔离级别是读提交。



二,Spring事务传播行为

      Spring中事务传播行为是指一个方法调用另一个方法,期间的事务属性怎么传播的问题。具体举例如下:

ServiceA{

     void serviceA(){

           doSomeThing;

           serviceB.serviceB();

           doSomeThing;

    }

}



ServiceB{

      void serviceB(){

             doSomeThing;

      }

}


       2.1,PROPAGATION_REQUIRED(支持当前事务,假设当前没有事务,就新建一个事务;默认的选择

               serviceB设置事务传播行为为PROPAGATION_REQUIRED

               如果serviceA方法在事务T1中,则serviceB就也在事务T1中运行;

               如果serviceA方法没有在事务中,则serviceB就新开启一个事务运行;


       2.2,PROPAGATION_SUPPORTS(支持当前事务;假如当前没有事务就以非事务方式运行)

               serviceB设置事务传播行为为PROPAGATION_SUPPORTS;

               如果serviceA方法在事务T1中运行,则serviceB也放在事务T1中运行;

               如果serviceA方法没有在事务中,则serviceB也按照非事务方式运行;


       2.3,PROPAGATION_MANDATORY(支持当前事务;假如当前没有事务就抛出异常)

                serviceB设置事务传播行为为PROPAGATION_MANDATORY,表示serviceB必须在事务中运行;

                如果serviceA方法在事务T1中运行,则serviceB也放在事务T1中运行;

                如果serviceA方法没有在事务中,则serviceB抛出异常;


       2.4,PROPAGATION_REQUIRES_NEW(新建事务;假如当前存在事务则把当前事务挂起)

               serviceB设置事务传播行为为PROPAGATION_REQUIRES_NEW,表示serviceB需要新开启一个事务运行;

               如果serviceA方法在事务T1中运行,则事务T1挂起,serviceB新起一个事务运行;

               如果serviceA方法没有在事务中,则serviceB新起一个事务运行;

               这里需要注意的是serviceA和serviceB抛异常的情况,这个具体在方法里面控制就可以了。


       2.5,PROPAGATION_NOT_SUPPORTED(以非事务方式运行;假如当前存在事务就把当前事务挂起)

               serviceB设置事务传播行为为PROPAGATION_NOT_SUPPORTED,表示serviceB以非事务方式运行;

               如果serviceA方法在事务T1中运行,则事务T1挂起,serviceB以非事务方式运行;

               如果serviceA方法没有在事务中,则serviceB以非事务方式运行;


       2.6,PROPAGATION_NEVER(以非事务方式运行;假如当前存在事务则抛出异常)

               serviceB设置事务传播行为为PROPAGATION_NEVER,表示serviceB以非事务方式运行;

               如果serviceA方法在事务T1中运行,则抛异常;

               如果serviceA方法没有在事务中,则serviceB以非事务方式运行;


       2.7,PROPAGATION_NESTED

                和PROPAGATION_REQUIRES_NEW的区别是PROPAGATION_REQUIRES_NEW另起一个事务运行,他的提交和serviceA方法的事务提交是独立的;

                   serviceB的事务和serviceA的事务是相依的,serviceB的提交要等和serviceA一起提交;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值