• Sping.事务的传播特性


    图示

    列表

    1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。

    2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。

    3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。

    4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。

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

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

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

    Nested和RequiresNew的区别

    RequiresNew每次都创建新的独立的物理事务,而Nested只有一个物理事务;

    Nested嵌套事务回滚或提交不会导致外部事务回滚或提交,但外部事务回滚将导致嵌套事务回滚,而 RequiresNew由于都是全新的事务,所以之间是无关联的;

    Nested使用JDBC 3的保存点(save point)实现,即如果使用低版本驱动将导致不支持嵌套事务。

    使用嵌套事务,必须确保具体事务管理器实现的nestedTransactionAllowed属性为true,否则不支持嵌套事务,如DataSourceTransactionManager默认支持,而HibernateTransactionManager默认不支持,需要设置来开启。

     

  • 相关阅读:
    Python如何自动操作电脑桌面应用程序
    Unity Shader - if 和 keyword 的指令比较
    Java并发编程学习十四:AQS框架
    Linux_7_软件管理
    transformers 之 head介绍
    基于Java的网络流量分析软件设计
    【AI数学】余弦相似性(含python实现)
    单机Linux下搭建MongoDB副本集-三节点
    【无标题】
    【图卷积神经网络】1-入门篇:为什么使用图神经网络
  • 原文地址:https://blog.csdn.net/weixin_42754896/article/details/126027958