关于Spring事务隔离、传播属性与@Transactional注解
作者:wangjun5159 时间:2021-11-15 04:37:11
mysql默认的隔离级别是repeatable_read
根据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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
idea输入sout无法自动补全System.out.println()的问题
![](https://img.aspxhome.com/file/2023/3/60603_0s.jpg)
Unity实现3D循环滚动效果
![](https://img.aspxhome.com/file/2023/4/68624_0s.png)
在Struts2中如何将父类属性序列化为JSON格式的解决方法
Java聊天室之使用Socket实现通信功能
![](https://img.aspxhome.com/file/2023/7/69117_0s.png)
一文带你了解C#中的协变与逆变
SSH框架网上商城项目第1战之整合Struts2、Hibernate4.3和Spring4.2
![](https://img.aspxhome.com/file/2023/6/68736_0s.png)
SpringBoot如何优雅的处理全局异常
![](https://img.aspxhome.com/file/2023/5/69355_0s.png)
SpringBoot集成Elasticsearch过程实例
![](https://img.aspxhome.com/file/2023/6/70486_0s.png)
Java二叉搜索树基础原理与实现方法详解
![](https://img.aspxhome.com/file/2023/4/65154_0s.png)
spring依赖注入知识点分享
深入理解Java中观察者模式与委托的对比
![](https://img.aspxhome.com/file/2023/2/58712_0s.png)
java实现PPT转化为PDF
Java全面分析面向对象之继承
![](https://img.aspxhome.com/file/2023/5/59735_0s.png)
Android 如何实现动态申请权限
Java时间转换成unix时间戳的方法
C++实现无重复字符的最长子串
android实现简易计算器
![](https://img.aspxhome.com/file/2023/4/83514_0s.jpg)
c# AcceptEx与完成端口(IOCP)结合的示例
jsp如何获取Session中的值
Springcloud seata nacos环境搭建过程图解
![](https://img.aspxhome.com/file/2023/1/61341_0s.png)