关于Spring事务隔离、传播属性与@Transactional注解

作者:wangjun5159 时间:2021-11-15 04:37:11 

mysql默认的隔离级别是repeatable_read

关于Spring事务隔离、传播属性与@Transactional注解

关于Spring事务隔离、传播属性与@Transactional注解

根据spring文档,数据库一共有4个隔离级别

  • read_uncommit

  • read_commited

    • 读已提交 ,解决了脏读

  • repeatable_read

    • 可重复读,解决了不可重复读

  • serializable

    • 顺序化 ,解决了幻读

对应的java类,org.springframework.transaction.annotation.Isolation

  • 脏读

    • 事务1修改了行1,但是还没commit,事务2读取了未commit的行1,事务1回滚了行1;

  • 不可重复读

    • 事务1读了行1,事务2修改了行1并commit,事务1再次读了行1,发现行1变了。

  • 幻读

    • 事务1读了满足where条件的所有行,事务2插入了满足where的一行,事务1再读同样的where条件时,获取了额外的“幻行”。

spring传播属性

spring事务传播属性,org.springframework.transaction.annotation.Propagation,其他有

  • required

    • 当前有事务,则利用已有事务;当前没有事务,则创建事务;

  • required_new

    • 创建新事物,如果存在事务,暂停当前事务;注意这里的措辞,先创建新事务,然后再判断是否存在事务,如果存在,则暂停;

  • supports

    • 当前有事务,使用当前事务,否则无事务执行;

  • nested

    • 如果当前存在事务,则创建子事务,其他的就跟required相同;只在特定的事务管理器支持nested,开箱即用的有JDBC DataSourceTransactionManager,有些JTA providers可能也支持nested事务;

  • never

    • 非事务执行,如果有事务则抛出异常;

  • mandatory

    • 使用当前事务,如果没有事务则抛出异常;

@Transactional注解

@Transactional注解 事务超时时间:依赖底层事务系统,取决于数据库。

  • rollbackfor

    • 默认RuntimeException回滚;checked exceptions(business exception)不会回滚;

  • readonly

    • 只能有查询语句,不能有update、insert语句,仅对required、required_new起作用。

总结

隔离级别和传播属性是两个概念,隔离级别属于数据库,传播属性是spring的,它们的所有者是不同的;隔离级别是为了解决事物间影响的问题;传播属性是为了解决,方法间事务互相利用的问题;

来源:https://wangjun5159.blog.csdn.net/article/details/115251146

标签:spring,事务隔离,传播属性,@Transactional
0
投稿

猜你喜欢

  • idea输入sout无法自动补全System.out.println()的问题

    2023-11-28 21:34:03
  • Unity实现3D循环滚动效果

    2023-04-22 14:05:47
  • 在Struts2中如何将父类属性序列化为JSON格式的解决方法

    2022-08-01 09:30:34
  • Java聊天室之使用Socket实现通信功能

    2022-03-08 09:46:27
  • 一文带你了解C#中的协变与逆变

    2022-08-06 22:31:21
  • SSH框架网上商城项目第1战之整合Struts2、Hibernate4.3和Spring4.2

    2023-04-19 15:01:55
  • SpringBoot如何优雅的处理全局异常

    2021-06-09 21:28:13
  • SpringBoot集成Elasticsearch过程实例

    2022-07-30 20:08:56
  • Java二叉搜索树基础原理与实现方法详解

    2022-09-12 17:20:59
  • spring依赖注入知识点分享

    2023-11-26 15:32:32
  • 深入理解Java中观察者模式与委托的对比

    2023-10-30 18:00:03
  • java实现PPT转化为PDF

    2021-06-17 05:02:24
  • Java全面分析面向对象之继承

    2023-11-23 11:55:59
  • Android 如何实现动态申请权限

    2023-07-30 00:51:31
  • Java时间转换成unix时间戳的方法

    2022-06-09 14:39:36
  • C++实现无重复字符的最长子串

    2023-11-02 22:49:00
  • android实现简易计算器

    2023-06-21 04:26:09
  • c# AcceptEx与完成端口(IOCP)结合的示例

    2023-07-29 01:46:24
  • jsp如何获取Session中的值

    2023-07-01 05:59:28
  • Springcloud seata nacos环境搭建过程图解

    2022-11-15 00:34:14
  • asp之家 软件编程 m.aspxhome.com