事务的传播机制
1、事务的特性(ACID):
原子性、一致性、隔离性、持久性
2、事务是什么?
事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(不成功、就失败)。
事务提交(commit):数据库向用户提供保存当前状态的方法。
事务回滚(rollback):当事务执行过程中,使数据库忽略当前的状态并回到前面保存的状态的方法。
3、事务的传播的机制
Spring的传播机制主要包括声明式事务和编程式事务,一般常用声明式事务。
声明式事务:在执行目标方法前后进行拦截,然后在目标执行方法前创建并加入事务,执行完目标方法后根据执行情况提交事务或者回滚事务。
编程式事务不常用就不解释了。
4、事务的七种传播行为
- propagation_required:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,则加入到这个事务中,(最常见的选择)
- propagation_supports:支持当前事务,如果没有当前事务,就以非事务方法执行。
- propagation_mandatory:使用当前事务,如果没有当前事务,就抛出异常。
- propagation_required_new:新建事务,如果当前存在事务,就把当前事务挂起。
- propagation_not_supported:以非事务方式执行操作,如果当前存事务,就把当前事务挂起。
- propagation_never:以非事务方式执行操作,如果当前事务存在则抛出异常。
- propagation_nested:如果当前存在事务,则在嵌套事务执行。如果当前没有事务,则执行与propagation_required类似的操作。
Spring默认的事务传播行为是PROPAGATION_REQUIRED,它适用于绝大多数情况。