SPRING事务的属性有哪些?其中,事务隔离级别有哪几种?什么情况需要使用这几种事务隔离级别?...

Sprin声明式事务,propagation属性列表 


PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 
PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。 
PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。 
PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。 
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。 
PROPAGATION_NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务(还不是太明白),如果当前没有事务,就新建一个事务。 

1 ISOLATION_DEFAULT 默认的隔离级别 
下面几个都是 JDBC isolation levels 一一对应: 
2 ISOLATION_READ_UNCOMMITTED Connection.TRANSACTION_READ_UNCOMMITTED
指示防止发生脏读的常量;不可重复读和虚读有可能发生。 
3 ISOLATION_READ_COMMITTED Connection.TRANSACTION_READ_COMMITTED 
指示可以发生脏读 (dirty read)、不可重复读和虚读 (phantom read) 的常量。 
4 ISOLATION_REPEATABLE_READ Connection.TRANSACTION_REPEATABLE_READ 
指示防止发生脏读和不可重复读的常量;虚读有可能发生。 
5 ISOLATION_SERIALIZABLE Connection.TRANSACTION_SERIALIZABLE 
指示防止发生脏读、不可重复读和虚读的常量。 

脏读 dirty reads:当事务读取还未被提交的数据时,就会发生这种事件。举例来说:Transaction 1 修改了一行数据,然后 Transaction 2 在 Transaction 1 还未提交修改操作之前读取了被修改的行。如果 Transaction 1 回滚了修改操作,那么 Transaction 2 读取的数据就可以看作是从未存在过的。 
不可重复的读 non-repeatable reads:当事务两次读取同一行数据,但每次得到的数据都不一样时,就会发生这种事件。举例来说:Transaction 1 读取一行数据,然后 Transaction 2 修改或删除该行并提交修改操作。当 Transaction 1 试图重新读取该行时,它就会得到不同的数据值(如果该行被更新)或发现该行不再存在(如果该行被删除)。 
虚读 phantom read:如果符合搜索条件的一行数据在后面的读取操作中出现,但该行数据却不属于最初的数据,就会发生这种事件。举例来说:Transaction 1 读取满足某种搜索条件的一些行,然后 Transaction 2 插入了符合 Transaction 1 的搜索条件的一个新行。如果 Transaction 1 重新执行产生原来那些行的查询,就会得到不同的行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPRING 事务属性主要包括传播行为、隔离级别、超时时间和只读属性等。 其中,事务隔离级别有四种,分别为: 1. 读未提交(READ_UNCOMMITTED):一个事务可以读取另一个未提交事务的数据变更,这种隔离级别会导致脏读、不可重复读和幻读问题。 2. 读已提交(READ_COMMITTED):一个事务只能读取另一个已提交事务的数据变更,可以避免脏读问题,但是不可重复读和幻读问题仍然存在。 3. 可重复读(REPEATABLE_READ):保证在同一个事务中多次读取同一数据时,结果是一致的。可重复读可以避免脏读和不可重复读问题,但是幻读问题仍然存在。 4. 序列化(SERIALIZABLE):最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,可以避免脏读、不可重复读、幻读问题。 在选择事务隔离级别时,需要根据具体场景进行选择。如果并发量较低,可以选择序列化隔离级别,如果并发量较高,但是数据更新不频繁,可以选择可重复读隔离级别,如果数据更新比较频繁,但是读取较少,可以选择读已提交隔离级别,如果数据更新非常频繁,并且读取也非常频繁,可以选择读未提交隔离级别需要注意的是,隔离级别越高,事务的并发性能就越低,因为隔离级别越高,需要加锁的情况就越多,从而影响并发性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值