事务管理原理2-事务传播特性
本节主要讲述上一节中事务的遗留问题-传播特性
事务的传播特性
事务的传播特性主要为了解决什么问题呢?
事务的传播特性主要解决了,当前事务中的方法调用另一个事务中方法时,如何处理这2个事务之间的关系的问题。
Propagation_required:如果当前存在事务就加入那个事务,如果不存在事务就新建一个事务。
Propagation_supports:支持当前事务,如果当前事务存在,就加入改事务,如果不存在,则以非事务方式运行
Propagation_mandatory:支持当前事务,如果当前事务存在,就加入该事务,如果不存在,就抛出异常
Propagation_requires_new:不论当前事务是不是存在都创建新的事务
Propagation_not_supports:以非事务方式运行,如果当前存在事务,就把当前事务挂起
Propagation_never :以非事务方式运行,如果当前存在事务,则抛出异常
Propagation_nested:当前存在事务,则在嵌套在事务内执行。如果没有事务,则新建事务
其中propagation_requires_new传播特性,一个事务方法调用的另一个事务方法抛出异常,只会导致部分回滚。
Propagation_required传播特性,一个事务方法中调用另一个事务方法抛出异常,全部回滚
Prapagation_nested传播特性,属于嵌套事务,通过设置保存点,回滚到保存点,继续另外的逻辑执行。
但值得注意的是,如果抛出的异常被捕获了,则不会触发事务回滚。
上面的传播类型并不是每种都会用到,比教常用或者值得注意的是propagation_required,Prapagation_nested,propagation_requires_new,Spring中默认的传播特性为propagation_required。
下一节介绍数据库锁,可以解决多个事务并发同一数据修改造成的丢失更新问题。