Spring事务传播机制和隔离级别(图文详解)

Spring事务传播机制和隔离级别(图文详解)-mikechen

Spring事务传播机制和隔离级别是Spring框架中用于管理事务的重要概念,下面分别详解。

Spring事务传播机制

Spring 事务传播机制是指,包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。

Spring 事务传播机制的级别包含以下 7 种:

  1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果没有事务,则创建一个新的事务。
  2. SUPPORTS:如果当前存在事务,则加入该事务;如果没有事务,则以非事务方式执行。
  3. MANDATORY:如果当前存在事务,则加入该事务;如果没有事务,则抛出异常。
  4. REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将其挂起。
  5. NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则将其挂起。
  6. NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
  7. NESTED:如果当前存在事务,则在嵌套事务内执行;如果没有事务,则创建一个新的事务。

以上 7 种传播机制,可分为以下 3 类:

Spring事务传播机制和隔离级别(图文详解)-mikechen

 

Spring事务隔离级别

Sping 中的事务隔离级别有 5 种,它们分别是:

  1. DEFAULT:使用数据库的默认隔离级别。
  2. READ_UNCOMMITTED:允许读取未提交的数据,可能导致脏读、不可重复读和幻读。
  3. READ_COMMITTED:只能读取已提交的数据,可以防止脏读,但不可避免不可重复读和幻读。
  4. REPEATABLE_READ:保证同一事务内多次读取同一数据时结果一致,可以防止脏读和不可重复读,但不能避免幻读。
  5. SERIALIZABLE:最高的隔离级别,通过强制事务串行执行来避免脏读、不可重复读和幻读。

事务隔离级别与问题的对应关系如下:

Spring事务传播机制和隔离级别(图文详解)-mikechen
  • 脏读:一个事务读取到了另一个事务修改的数据之后,后一个事务又进行了回滚操作,从而导致第一个事务读取的数据是错误的。
  • 不可重复读:一个事务两次查询得到的结果不同,因为在两次查询中间,有另一个事务把数据修改了。
  • 幻读:一个事务两次查询中得到的结果集不同,因为在两次查询中另一个事务有新增了一部分数据。

Spring框架通过事务传播机制定义了事务在方法之间的传播方式,而事务隔离级别定义了事务在数据库操作中的隔离级别。

可以根据具体的业务需求和数据库特性来选择合适的事务传播机制和隔离级别,以确保事务的正确性和性能。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获知最新一线技术干货!

评论交流
    说说你的看法