springboot事务管理详解

springboot事务管理详解1、隔离级别隔离级别是指若干个并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读取、重复读、幻读。我们可以看org.springframework.transaction.annotation.Isolation枚举类中定义了五个表示隔离级别的值:publicenumIsolation{DEFAULT(-1),READ_UNCOMMITTED(…

大家好,又见面了,我是你们的朋友全栈君。

1、隔离级别

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

我们可以看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)

2、传播行为

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

我们可以看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://javaforall.net/132571.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LayoutParams理解和使用「建议收藏」

    LayoutParams理解和使用「建议收藏」LayoutParams理解和使用

    2022年9月21日
  • (轉貼) 曾說退出政壇 謝長廷:是幽默啦!(News)

    (轉貼) 曾說退出政壇 謝長廷:是幽默啦!(News)(轉貼) 曾說退出政壇 謝長廷:是幽默啦!(News)

    2022年4月21日
  • 电赛练习之旋转倒立摆

    电赛练习之旋转倒立摆2019年电赛已经结束,虽然结果不能令人满意,但闲下来,还是总结一下电赛学到的东西与失败的地方。这一次先来谈一下一阶旋转倒立摆。一、题目分析:拿到一道题目,其实最应该做的事情是分析题目,因为我们往往可以发现某些发挥题是在基础题的基础上进行的,但是,可能某些发挥题需要在基础题的基础上修改结构,我们也可以发现,题目中的某些问题具有相似性,当我们合并同类项的时候,可以把题目的要求变得简单。一下,我粘…

    2022年8月18日
  • 一步一步教你_CT增强技术

    一步一步教你_CT增强技术一篇来自博客园的作者的介绍实现text-detection-ctpn一路的坎坎坷坷作者讲的很详细,一步一个脚印。很适合初次接触CTPN的小白,老鸟也会学到不少新的东西。感谢作者。…

    2022年11月1日
  • db4o的使用

    db4o的使用from:http://www.ibm.com/developerworks/cn/java/j-lo-db4o2/index.html前言在 db4o之旅 系列文章的第一部分:初识db4o 中,作者介绍了db4o的历史和现状,应用领域,以及和ORM等的比较。在这篇文章中,作者将会介绍db4o的安装、启动以及三种不同的查询方式:QBE(QuerybyEx

    2022年7月21日
  • 文字识别:CRNN「建议收藏」

    文字识别:CRNN「建议收藏」文字识别:CRNN

    2022年4月20日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号