博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring 事务隔离级别、事务的传播机制
阅读量:5845 次
发布时间:2019-06-18

本文共 1480 字,大约阅读时间需要 4 分钟。

隔离级别

隔离级别是指若干个并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读取、重复读、幻读。

我们可以看org.springframework.transaction.annotation.Isolation枚举类中定义了五个表示隔离级别的值:

public enum Isolation {    DEFAULT(-1),    READ_UNCOMMITTED(1),    READ_COMMITTED(2),    REPEATABLE_READ(4),    SERIALIZABLE(8);}
  • DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是:READ_COMMITTED
  • READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。
  • READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
  • REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。
  • SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

指定方法:通过使用isolation属性设置,例如:

@Transactional(isolation = Isolation.DEFAULT)
  • 传播行为

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。

我们可以看org.springframework.transaction.annotation.Propagation枚举类中定义了6个表示传播行为的枚举值:

public enum Propagation {    REQUIRED(0),    SUPPORTS(1),    MANDATORY(2),    REQUIRES_NEW(3),    NOT_SUPPORTED(4),    NEVER(5),    NESTED(6);}
  • REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
  • SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
  • MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
  • REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
  • NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
  • NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
  • NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于REQUIRED。

指定方法:通过使用propagation属性设置,例如:

@Transactional(propagation = Propagation.REQUIRED)

转载于:https://my.oschina.net/wugong/blog/1790457

你可能感兴趣的文章
openresty修改302的location
查看>>
Chef宣布100%开源,要走红帽模式?\n
查看>>
“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战
查看>>
利用人工智能提升团队包容性
查看>>
Oracle发布多语种虚拟机平台GraalVM 1.0
查看>>
Gil Zilberfeld问答:敏捷产品的规划与管理
查看>>
Lisk沙箱漏洞分析及解决方案
查看>>
Qt 工程管理
查看>>
Azul Systems推出Falcon,一个基于LLVM的新的Java即时编译器
查看>>
某些编程语言更容易出错?研究人员提出质疑
查看>>
90 后 CTO 创业 6 年,做了一件改变互联网的“小事”
查看>>
首份《敏捷回顾年度报告》发布
查看>>
Rust 1.30带来更多元编程支持,并改进了模块系统
查看>>
Slack桌面3.0迁移到BrowserView
查看>>
openresty 前端开发入门二
查看>>
用户超5亿,三年投10亿,开发者如何抢滩支付宝小程序蓝海?
查看>>
Uber:大规模系统下如何构建可伸缩的告警生态系统\n
查看>>
创新技术重塑未来物联网
查看>>
华中科大提出EAT-NAS方法:提升大规模神经模型搜索速度
查看>>
Etsy如何及为什么迁移到API优先的架构
查看>>