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

事物注解方式: @Transactional

【一】传播行为:

使用方法:@Transactional(propagation=Propagation.REQUIRED) 

Require:支持当前事务,如果没有事务,就建一个新的,这是最常见的;

Supports:支持当前事务,如果当前没有事务,就以非事务方式执行;

Mandatory:支持当前事务,如果当前没有事务,就抛出异常;

RequiresNew:新建事务,如果当前存在事务,把当前事务挂起,先执行新的在执行旧的;

NotSupported:容器不为这个方法开启事务。

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

Nested:新建事务,如果当前存在事务,把当前事务挂起。与RequireNew的区别是与父事务相关,且有一个savepoint。

【二】隔离级别:

先上一张图:

  

1、事务的隔离级别:是为了使你在性能与数据的有效性之间做一个平衡,不是说级别越高越好,只有合适才是最好的。

  多用于处理多事务的并发问题,并行可以提高数据库的吞吐量和效率。

     使用方法:@Transactional(isolation = Isolation.SERIALIZABLE)

  Serializable(串行化 )。最严格的级别,事务串行执行,资源消耗最大;

  Repeatable Read(可重复读)。

  Read Committed(读取已提交数据)。大多数主流数据库的默认事务等级

  Read Uncommitted(读取未提交数据)。

相关概念:

  脏读 : 一个事务读取到另一事务未提交的更新数据

  不可重复读 : 在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说, 后续读取可以读到另一事务已提交的更新数据。

  可重复读:在同一事务中多次读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据。

  幻读 : 一个事务读到另一个事务已提交的insert数据

原文地址:https://www.cnblogs.com/start-fxw/p/7026324.html