1.什么是事务?
事务就是把一系列的操作当成一个整体单元来处理,这些动作要么全部成功,要么全部失败。将这一系列的操作当成原子性动作去执行。
2.事务的属性(ACID)
-
原子性(Automicity)
事务是一个原子性的操作,有一系列的动作组成,要么成功要么失败,保证数据的完整性;若其中有一个事务出现失败情况,所有事务都将会回退到事务操作之前的状态;
-
一致性(Consistency)
事务不能破坏数据的完整性和业务逻辑的一致性。
-
隔离性(Isolation)
在并发的环境中,每个事务之间的操作必须相互独立,互不影响。
-
持久性(Durability)
事务在操作完成后会保存到持久化存储器中,之后的任何操作都不能改变是事务的结果。
3.Spring中事务的分类
-
编程式事务
事务可以通过代码的方式来管理。 在代码逻辑中显式的调用beginTransaction()、commit()、rollback()等事务管理的方法。
-
声明式事务
在方法的外围(注解)或者XML文件中配置事务的管理机制。
编程式事务和声明式事务的优缺点分析:
①编程式事务
优点 | 缺点 |
---|---|
可以自己控制事务的提交回滚 | 代码量大,且入侵代码 |
②声明式事务
优点 | 缺点 |
---|---|
减少了代码量,使用XML或者注解配置 | |
系统自动进行commit或rollback | 文件配置比较繁琐 |
4.Spring的事务行为
行为 | 解释 |
---|---|
PROPAGATION_REQUIRED | 如果存在当前事务,则加入事务;如果当前没有事务,则创建一个新事务。Spring默认为此行为 |
PROPAGATION_REQUIRED_NEW | 创建一个新事务,如果当前存在事务,将当前事务挂起 |
PROPAGATION_SUPPORTS | 如果存在事务则加入当前事务,如果不存在则以非事务方式运行 |
PROPAGATION_NOT_SUPPORTS | 以非事务方式运行,如果当前存在事务则将当前事务挂起 |
PROPAGATION_NEVER | 以非事务方式运行,如果当前存在事务,则抛出异常 |
PROPAGATION_MANDATORY | 如果存在事务则加入当前事务,如果不存在事务则抛出异常 |
PROPAGATION_NESTED | 如果存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPGATION_REQUIRED |