Spring的事务
2024-09-12 04:46:01
事务:事务指的是逻辑上的一组操作,这组操作要么都成功,要么都失败。
Transaction事务的四大特性ACID:
1.Atomicity原子性
事务的操作要么都成功,要么都不做,只要有一个失败,就会回滚。
如A转账100给B:A转出100,B转入100,这两步要么一起完成,要么都不做。
2.Consistency一致性
事务的运行前后数据的完整性必须保持一致。
如A有200,B有200,一共400,A转给B100后,总金额还是400。
3.Isolation隔离性
并发的事务之间不会相互影响,多个并发事务之间的数据要相互隔离(设置隔离级别)。
如A转100给B:若事务未完成,B的账户是不会多100的。
4.Durability持久性
事务一旦提交,它所做的修改将永久的保存在数据库中,不会受其他方面的影响。
Spring中的事务管理介绍(高层抽象包括3个接口):
1.PlatformTransactionManager 事务管理器
2.TransactionDefinition 事务定义信息(隔离、传播、超时、只读)
3.TransactionStatus 事务具体运行状态
如果不考虑隔离性,会引发安全问题:
1.脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
2.不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。
3.幻读:一个事务读取了几行记录后,另一个事务插入了几行数据,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。 隔离级别:
DEFAULT : 使用后端数据库默认的隔离级别(Spring中的选择项)
READ_UNCOMMITED : 允许你读取还未提交的改变了的数据。可能导致脏、幻、不可重复读。
READ_COMMITTED : 允许在并发事务已经提交后读取。可防止脏读,但幻读和不可重复读仍可发生。(Oracle默认隔离级别)
REPEATABLE_READ : 对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生。(MySQL默认隔离级别)
SERIALIZABLE : 完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。在所有隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。 事务的传播行为:解决业务层之间的相互调用。同时调用业务层中不同类的方法
PROPAGATION_REQUIRED : 支持当前事务,如果不存在,就新建一个。
PROPAGATION_SUPPORTS : 支持当前事务,如果不存在,就不使用事务。
PROPAGATION_MANDATORY : 支持当前事务,如果不存在,抛出异常。
PROPAGATION_REQUIRES_NEW : 如果有事务存在,挂起当前事务,创建一个新的事务。
PROPAGATION_NOT_SUPPORTED : 以非事务方式运行,如果有事务存在,挂起当前事务。
PROPAGATION_NEVER : 以非事务方式运行,如果有事务存在,抛出异常。
PROPAGATION_NESTED : 如果当前事务存在,则嵌套事务执行。
最新文章
- jquery.min.map 404 (Not Found)出错的原因及解决办法
- winform中button的image属性无法更改
- 【转】UML类图几种关系的总结
- WPF Window 服务安装
- 安装MySQL总结
- qt qml中PropertyAnimation的几种使用方法
- C++ Primer 学习笔记_62_重载操作符与转换 --调用操作符和函数对象
- Eclipse安装git
- Unity 类似FingerGestures 的相机跟随功能
- [原创]手把手教你写网络爬虫(4):Scrapy入门
- gtk+2.0中GtkObject结构中没有klass成员的解决办法
- java基础语法(二)--单列模式
- vue的$nextTick使用总结,this.$refs为undefined的解决办法,element Ui的树形控件setCheckedKeys方法无法使用
- winform界面特效470多例
- [UE4]Spin Box,数字输入,可拖动
- 月球美容计划之最小生成树(MST)
- [django]cbv方式
- VMware Linux 下 Nginx 安装配置 (一)
- C++类中的访问权限问题
- [WinCE] Win CE 屏幕截图
热门文章
- ServletRegistrationBean的源码摘要
- tomcat错误The superclass ";javax.servlet.http.HttpServlet"; was not found on the Java Build Path
- Spring Boot 引入org.springframework.boot.SpringApplication出错
- mac charles抓安卓(小米)http包
- Android自定义控件之日历控件
- 怎样将PDF文件转换成Excel表格
- 如何用anysend发wirshark的报文
- Python中的引用传参
- 学习ActiveMQ(六):JMS消息的确认与重发机制
- python之dict