• 【原创】spring中的事务传播特性


    关于spring的传播特性,我对其进行了详细的叙述了下:

    PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

    比如方法A调用方法B,如果方法A,B都使用该特性,那么A会开启事务,
    执行到B的时候,B发现自己处于一个事务中,则会合并到该事务中和
    A公用一个事务执行,弱任一异常会回滚整个事务,AB执行都失败。
    
    若A未开启事务且未使用该特性,B使用该特性,B发现未处于一
    个事务中,则会主动开启事务,只有B会使用事务,A不会。

    PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。

    方法AB,A调用B,A使用REQUIRED,会开启事务,B,使用SUPPORTS,则B会加入A的事务,若A未使用事务,则B也不使用事务。

    PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。

    方法AB,A【REQUIRED】调用B【SUPPORTS】,A如果有事务,则B会加入事务,若A没有事务,B会报错,B必须加入一个显示存在的事务,自己不能开启事务。

    PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。

    方法AB,A【REQUIRES_NEW】调用B【REQUIRES_NEW】,那么执行到B时,A事务会挂起,B会开启一个新的事务。A和B处于完全不同的两个事务之中。

    PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

    方法AB,A【REQUIRED】调用B【NOT_SUPPORTED】,B会挂起A事务,然后B不使用事务执行,也就是和A异步错开执行。

    PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

    不允许在事务内执行,否则抛出异常。

    PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

    A调用B,A【REQUIRED】调用B【NESTED】,此时B会作为嵌套事务开始执行,所谓嵌套事务,实际上就是加入A的事务和A使用一个事务,只是使用savepoint,如果B执行失败,会回滚到savepoint,然后A根据配置决定是回滚还是继续执行,这样就产生分支执行的情况。如B失败回滚,A可以在异常处理catch中继续未完成的操作。

    1.要设置 transactionManager nestedTransactionAllowed 属性为 true。

    2.

  • 相关阅读:
    Maven命令行使用:mvn clean package(打包)
    快速构建 Spring Boot 应用
    Spring MVC 表单处理
    Spring Web Hello World 例子
    Spring 事务管理
    开发环境搭建
    考研计算机专业课练习题
    考研计算机自测练习
    考研计算机自测练习答案
    考研计算机专业常见术语
  • 原文地址:https://www.cnblogs.com/zhangxsh/p/3575441.html
Copyright © 2020-2023  润新知