栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring的事务管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring的事务管理

事务的ACID特性

原子性(Atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。

一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。在事务开始前后,数据库的完整性约束没有被破坏。例如违反了唯一性,必须撤销事务,返回初始状态。

隔离性(isolation):每个读写事务的对象对其他事务的操作对象能相互分离,即:事务提交前对其他事务是不可见的,通常内部加锁实现。

持久性(durability):一旦事务提交,则其所做的修改会永久保存到数据库。

spring中事务的属性

传播行为:
1.PROPAGATION_REQUIRED
支持当前事务;如果不存在,创建一个新的。这通常是事务定义的默认设置,通常定义事务同步作用域。
2.PROPAGATION_SUPPORTS
支持当前事务;如果不存在事务,则以非事务方式执行。
3.PROPAGATION_REQUIRES_NEW
创建一个新事务,如果存在当前事务,则挂起当前事务。
4.PROPAGATION_MANDATORY
支持当前事务;如果当前事务不存在,抛出异常。
5.PROPAGATION_NEVER
不支持当前事务;如果当前事务存在,抛出异常。
6:PROPAGATION_NOT_SUPPORTED
不支持当前事务,存在事务挂起当前事务;始终以非事务方式执行。
7.PROPAGATION_NESTED
如果当前事务存在,则在嵌套事务中执行,如果当前没有事务,类似PROPAGATION_REQUIRED(创建一个新的)。

隔离级别
1.Read Uncommitted(读取未提交内容):可能读取其它事务未提交的数据。----脏读问题,不可重复读
2:Read Committed(读取提交内容):一个事务只能看见已经提交事务所做的改变。----不可重复读,幻读
3:Repeatable Read(可重读):同一事务内多次一致性非锁定读,取第一次读取时建立的快照版本(MVCC),保证了同一事务内部的可重复读。
4:Serializable(串行化):这是最高的隔离级别,它是在每个读的数据行上加上共享锁(LOCK IN SHARE MODE)。在这个级别,可能导致大量的超时现象和锁竞争。
.
不可重复读和幻读的区别:
  不可重复读:(读取数据本身的对比)一个事务在读取某些数据后的一段时间后,再次读取这个数据,发现其读取出来的数据内容已经发生了改变,就是不可重复读。
  幻读:(读取结果集条数的对比)一个事务按相同的查询条件查询之前检索过的数据,确发现检索出来的结果集条数变多或者减少(由其他事务插入、删除的),类似产生幻觉。

回滚机制(rollbackfor)

是否只读(readonly)

超时时间(timeout)

spring中事务失效的场景
1:数据库层面,数据库的引擎本身不支持事务
2:被@Transactional注解的方法所在的类没有被spring管理
3:被@Transactional注解的方法所在的类不是public的
4:自身调用的时候,调该类自己的方法,而没有经过 Spring 的代理类,默认只有在外部调用事务才会生效。
因为被spring管理的时候spring内部aop创建的代理对象会把事务的自动提交机制关闭,然后开启事务。

@Service
public class OrderServiceImpl implements OrderService {

@Transactional
public void update(Order order) {
    updateOrder(order);
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateOrder(Order order) {
    // update order
 }    
}

5:数据源没有配置事务管理器
6:没有配置回滚的异常类型,默认是RuntimeException,发生的异常不属于这个类。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777015.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号