Spring事务隔离 && 事务传播

事务的四个属性:
1:原子性(Atomic)
  • 最重要的原则,也是最容易理解的原则。被事务管理的全部方法,要么一块儿被提交,要么一块儿回滚。
2:一致性( Consistency)
  • 事务在系统完整性中实施一致性,若是事务成功地完成,那么系统中全部变化将正确地应用,系统处于新有效状态。若是在事务中出现错误,那么系统中的全部变化将自动地回滚,系统返回到原始状态。
3:隔离性(Isolation)
  • 在处理一个事务的时候,若是有一个事务同时处理,必须等待这个事务处理完毕,才能进行下一次处理。
4:持久性( Durability)
  • 持久性意味着一旦事务执行成功,在系统中产生的全部变化将是永久的。应该存在一些检查点防止在系统失败时丢失信息。甚至硬件自己失败,系统的状态仍能经过在日志中记录事务完成的任务进行重建。举例:在执行事务的时候,忽然停电,等再来电的时候,有个事务记录通知从新执行下这个事务 。
并发问题:

 

  • 脏读:(一个事务读取了未提交的事务)指当一个事务正在访问数据,而且对数据进行了修改,而这种修改尚未提交到数据库中,这时,另一个事务也访问这个数据,而后使用了这个数据。
  • 不可重复读:(同一个事务中屡次读取同一个数据返回的结果不一样 )指在一个事务内,屡次读同一数据。在这个事务尚未结束时,另一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,因为第二个事务的修改,那么第一个事务两次读到的的数据多是不同的。
  • 幻觉读:(一个事务读取到了另外一个事务已提交的insert数据)指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的所有数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,之后就会发生操做第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉同样。

 

 

ISOLATION_DEFAULT:使用数据库默认的隔离级别mysql

事务隔离级别:
Spring事务隔离  事务传播 - DaySpring - DaySpring
加锁读 serializable, mysql默承认重复读
 
ISOLATION_DEFAULT:使用数据库默认的隔离级别
事务并发处理: 
  • 共享锁:共享锁用于读取数据操做,它容许其余事务同时读取某锁定的资源,但不容许其余事务更新它。 
  • 排他锁:排它锁用于修改数据的场合。它锁定的资源,其余事务不能读取也不能修改。 
  • 更新锁:更新锁在更新操做的初始化阶段用来锁定可能要被修改的资源,从而避免使用共享锁形成的死锁现象。 
事务传播:
  • 一、required  若是当前没有事务,就新建一个事务,若是已经存在一个事务中,加入到这个事务中。
  • 二、mandatory 使用当前的事务,若是当前没有事务,就抛出异常。
  • 三、requiresnew  新建事务,若是当前存在事务,把当前事务挂起。
  • 四、supports  支持当前事务,若是当前没有事务,就以非事务方式执行。
  • 五、not_supported  以非事务方式执行操做,若是当前存在事务,就把当前事务挂起。
  • 六、Never  以非事务方式执行,若是当前存在事务,则抛出异常。
  • 七、Nested:若是当前存在事务,则在嵌套事务内执行。若是当前没有事务,则进行与required相似的操做。
 
编程式(当你只有不多的事务操做时,编程式事务管理一般比较合适。)
声明式(若是你的应用中存在大量事务操做,那么声明式事务管理一般是值得的。它将事务管理与业务逻辑分离,并且在Spring中配置也不难。)
相关文章
相关标签/搜索