spring事务的传播机制和隔离性

Posted hy7873

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring事务的传播机制和隔离性相关的知识,希望对你有一定的参考价值。

1、事务的传播机制:

指多个事务方法在相互调用时,事务如何在这些方法中传播。

Spring支持7种事务传播行为:

  • PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
  • PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
  • PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
  • PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
  • PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
  • PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
  • PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。

Spring 默认的事务传播行为是 PROPAGATION_REQUIRED,它适合于绝大多数的情况。假设 ServiveX#methodX() 都工作在事务环境下(即都被 Spring 事务增强了),假设程序中存在如下的调用链:Service1#method1()->Service2#method2()->Service3#method3(),那么这 3 个服务类的 3 个方法通过 Spring 的事务传播机制都工作在同一个事务中。

 

2、事务的隔离性:

隔离级别定义一个事务可能受其他并发事务活动影响的程度。

完全隔离会影响性能所以并非所有应用程序都要求完全隔离,所以定义了如下隔离级别:

 

隔离级别含义
ISOLATION_DEFAULT 使用后端数据库默认的隔离级别。
ISOLATION_READ_UNCOMMITTED 允许读取尚未提交的更改。可能导致脏读、幻影读或不可重复读。
ISOLATION_READ_COMMITTED 允许从已经提交的并发事务读取。可防止脏读,但幻影读和不可重复读仍可能会发生。
ISOLATION_REPEATABLE_READ 对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻影读仍可能发生。
ISOLATION_SERIALIZABLE 完全服从ACID的隔离级别,确保不发生脏读、不可重复读和幻影读。这在所有隔离级别中也是最慢的,因为它通常是通过完全锁定当前事务所涉及的数据表来完成的。

 

 

以上是关于spring事务的传播机制和隔离性的主要内容,如果未能解决你的问题,请参考以下文章

数据库的特性与隔离级别和spring事务的传播机制和隔离级别

数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别

Spring事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理

Spring事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理

Spring事务传播性与隔离级别

spring事务传播机制和隔离级别