Spring事务使用

1.事务介绍

事务是应用程序中一系列严密的操作,从操作开始到结束,要么全部成功,要么每个操作的所有更改全部撤回。事务的结束只有两种情况,全部成功执行;操作发生回滚。

2.事务的特性

事务具有四个特性ACID

  • 原子性(Atomicity).一个事务是一个不可分割的工作单位,事务中包括的诸多操作要么全做,要么都不做。
  • 一致性(Consistency)。事务在数据执行前后保持数据的一致性。
  • 隔离性(Isolation)。一个事务的执行不会被其他事务进行干扰,并发执行的各个事务之间是互不干扰的。
  • 持久性(Durability)。指事务一旦提交,它对数据库的影响是永久性的。

事务的隔离级别
事务的隔离级别是指若干个事务并发执行时的隔离程度,在此需要先解释几个名词:
脏读:一个事务读取到另一个事务未提交的数据。
不可重复读:一个事务读取到另一个事务已提交update的数据,多次查询结果不一致。
幻读:一个事务读取到另一个事务已提交insert的数据,多次查询结果不一致。

Spring提供了5种隔离级别

  1. @Transactional(islocation = Isolation.DEFAULT),默认的事务隔离级别,也就是采用数据库的隔离级别。
  2. @Transactional(islocation = Isolation.READ_UNCOMMITTED),读未提交,允许其他事务读取未提交的数据,会产生脏读,不可重复读,幻读
  3. @Transactional(islocation = Isolation.READ_COMMITTED),读已提交,允许其他事务读取已修改的数据,会产生不可重复读,幻读
  4. @Transactional(islocation = Isolation.REPEATABLE_READ),可重复度,会产生幻读
  5. @Transactional(islocation = Isolation.SERIALIZABLE),串行化,这是最高级别的事务隔离级别,事务按照顺序执行,避免了脏读,不可重复读,幻读。
数据库默认隔离级别
oracleREAD COMMITTED
mysqlREPEATABLE-READ

事务的传播行为
事务的传播行为是指多个事务存在时,Spring处理这些事务的行为,事务的传播行为有如下7种:

  1. PROPAGATION_REQUIRED ,Spring的默认的事务传播行为,如果当前存在事务,就加入该事务,如果当前没有存在事务,就创建一个新事务
  2. PROPAGATION_SUPPORTS,如果当前存在事务,就加入该事务,如果当前没有存在事务,就以非事务的方式运行
  3. PROPAGATION_MANDATORY,如果当前存在事务,就加入该事务,如果当前没有存在事务就抛出异常
  4. PROPAGATION_REQUIRES_NEW,创建一个新事务,如果当前存在事务,就把当前事务挂起
  5. PROPAGATION_NOT_SUPPORTED 以非事务的方式执行,如果当前存在事务,就把当前事务挂起
  6. PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行,如果没有事务等价于PROPAGATION_REQUIRED
  7. PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值