事务管理原理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。

   下一节介绍数据库锁,可以解决多个事务并发同一数据修改造成的丢失更新问题。

猜你喜欢

转载自www.cnblogs.com/williamzhang1111/p/10206038.html
今日推荐