美文网首页
Spring事务隔离和事务传播

Spring事务隔离和事务传播

作者: 过去今天和未来 | 来源:发表于2017-12-03 15:23 被阅读19次

        事务:事务程序中一系列的操作,所有操作必须成功完成,否则每个操作做的更改会被撤销。

        事务特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、(Durability)持续性(ACID)

       Spring事务隔离级别

    首先说明事务并发情况下存在的问题

    1.脏读:当一个事物在对数据进行更新操作,但未提交,另一个事务同时也来操作这组数据,并读取了前一个事务还未提交的数据,当前一个事务如果操作失败进行回滚,后一个事务读取的就是错误数据造成了脏读情况。

   2.不可重复读:一个事务多次读取同一个数据,并该事物还未结束,另一个事务也对该数据进行操作,而且第一个事务两次读取之间,第二个事务对数据进行更新,这样第一个事务两次读取的数据不同,这样就造成不可重复读。

    3.幻像读:第一个数据正在查询一条数据,同时另一个事物有插入一条数据,第一个事务在第二次查询符合同一条件的数据时,发现多了一条前面没有查到的数据,仿佛幻觉。

存在以上问题,Spring可以进行设置隔离级别

      read uncommited(读未提交):允许另一个事务可以看到该事物未提交的数据

       read commited (读提交):保证事务提交以后才能被另一个事务读取

        read repeatable(读重复): 这种事务隔离级别可以防止脏读,不可重复读。但是可能会出现幻象读

         serializable(序列化):事务被处理为顺序执行,可以避免脏读、幻读、复读

Spring事务传播特性

      propagation_requierd: 如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,这是最常见的选择。

      propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。

     propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常

     propagation_required_new:新建事务,如果当前存在事务,把当前事务挂起。

      propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起

      propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常

      propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作

相关文章

网友评论

      本文标题:Spring事务隔离和事务传播

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