SSM-Spring-数据库事务管理-选择隔离级别和传播行为

SSM-Spring-数据库事务管理-选择隔离级别和传播行为

​ 选择隔离级别的出发点:一致性和性能


选择隔离级别

​ 大部分情况会选着读写提交的方式设置事务,有助于提高提高并发,又压制脏读,但对一致性还存在问题。

使用@Transactional方式进行配置:

@Autowried
private RoleDao =null;

//设置方法为读写提交的隔离级别
@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED)
public int insertRole(Role role){
    return roleDao.insert(role);
}

​ 总之:隔离级别根据并发的大小和性能来决定。而且对于数据库不同,隔离级别的支持是不一样的,mysql可以支持4种,而oracle只能支持2种隔离级别。


传播行为

​ 传播行为是指方法之间的调用事务策略的问题,一个方法调度另外一个方法时,可以对事务的特性进行传播配置,成为传播行为,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xt9CRATS-1617261765610)(C:\Users\Administrator\Desktop\学习笔记\SSM\img\image-20210401144840191.png)]

​ spring中传播行为的类型,是通过一个枚举类型去定义的,该枚举类org.springframework.transaction.annotation.Propagation,有7种传播行为:

传播行为含义备注
REQUIRED当调用方法时,如果不存在当前事务,那么就创建事务;如果存在,就沿用之前的事务spring默认的传播行为
SUPPORTS当调用方法时,如果不存在当前事务,那么不启用事务;如果存在,就沿用之前的事务
MANDATORY方法必须在事务内运行如果不存在当前事务,那么就抛出异常
REQUIRES_NEW无论是否存在当前事务,方法都会在新的事务中运行也就是事务管理器会打开新的事务运行该方法
NOT _SUPPORTED不支持事务,如果不存在当前事务也不会创建事务;如果存在,则挂起,直至方法结束后才恢复当前事务适用于那些不需要事务的 SQL
NEVER不支持事务,只有在没有事务的环境中才能运用他如果方法存在当前事务,则抛出异常
NESTED嵌套事务,调用方法如果抛出异常只回滚自己内部执行的SQL,不会回滚主方法的SQL它的实现存在两种情况,如果当前数据库支持保存点,那么它就会在当前事务上使用保存点技术;如果发生异常则将方法内执行的SQL回滚到保存点上,而不是全部回滚,否则就等同于REQUIRES_NEW创建新的事物运行方法代码

最常用REQUIRED,企业中比较关注的:NESTED和REQUIRES_NEW

最常用REQUIRED,企业中比较关注的:NESTED和REQUIRES_NEW

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值