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

注意: 除非是一个实际的事务开始,否则传播级别和超时时间的设置将不会生效.只有 

PROPAGATION_REQUIRED          PROPAGATION_REQUIRES_NEW           PROPAGATION_NESTED 

可以触发, 所以通常在其他场景下指定这些配置是没有意义的. 此外, 注意不是所有事务管理器都会支持这些先进的特性, 因此, 当给定了非默认的值时,可能会有相应的异常抛出.

传播级别

PROPAGATION_REQUIRED

支持当前事务,如果当前不存在事务,则创建一个新的事务.通常这是事务定义的默认设置,通常定义一个事务同步的范围.

PROPAGATION_SUPPORTS

支持当前事务,如果当前不存在事务,则以非事务的方法执行.对于有事务同步的事务管理器来说PROPAGATION_SUPPORTS 与没有事务根本上来说有细微的不同,因为PROPAGATION_SUPPORTS定义了一个同步适用的范围.一般情况下, 谨慎使用PROPAGATION_SUPPORTS!  特别是, 在一个PROPAGATION_SUPPORTS范围内, 不要依赖PROPAGATION_REQUIRED或者PROPAGATION_REQUIRES_NEW(可能导致在运行时的同步冲突). 如果这样的嵌套是不可避免的, 请确保合适地配置你的事务管理器(通常转换成在实际事务中同步)

PROPAGATION_MANDATORY

支持当前事务,如果当前不存在事务则抛出异常. 注意: PROPAGATION_MANDATORY范围的事务同步总是被它的外围事务驱动着.

PROPAGATION_REQUIRES_NEW

创建一个新事务如果当前事务存在,暂停当前的事务.  注意: 实际事务暂停在所有的事务管理器上不会开箱即用的工作. PROPAGATION_REQUIRES_NEW范围总是定义它自己的事务同步. 现有的同步会被适时地暂停和恢复.

PROPAGATION_NOT_SUPPORTED

不支持当前的事务,总是非事务性的执行.

PROPAGATION_NEVER

不支持当前事务,如果当前存在事务,则抛出异常

PROPAGATION_NESTED

如果当前事务存在,执行一个嵌套事务,否则像PROPAGATION_REQUIRED一样执行.

 

隔离级别

ISOLATION_DEFAULT

使用 底层存储的默认隔离级别(对应JDBC的隔离级别)

ISOLATION_READ_UNCOMMITTED

脏读,不可重复读,幻读可以发生

该级别允许某条记录被一个事务改变,改变被提交之前,而被另一个事务读取(脏读).如果改变被回滚,第二个事务(读事务)将得到一个无效记录.

ISOLATION_READ_COMMITTED

脏读被阻止,不可重复读和幻读仍然存在 

ISOLATION_REPEATABLE_READ

脏读和不可重复读被阻止,幻读仍然存在

ISOLATION_SERIALIZABLE

脏读,不可重复读,幻读都被阻止

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值