• Spring事务传播属性


    Spring 对事务控制的支持统一在 TransactionDefinition 类中描述,该类有以下几个重要的接口方法:

    • int getPropagationBehavior():事务的传播行为
    • int getIsolationLevel():事务的隔离级别
    • int getTimeout():事务的过期时间
    • boolean isReadOnly():事务的读写特性。

    DefaultTransactionDefinition可以看到默认配置,

    private int propagationBehavior = PROPAGATION_REQUIRED;

    除了事务的传播行为外,事务的其它特性 Spring 是借助底层资源的功能来完成的,Spring 无非只充当个代理的角色。但是事务的传播行为却是 Spring 凭借自身的框架提供的功能,是 Spring 提供给开发者最珍贵的礼物。

    所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring 支持 7 种事务传播行为:

    • PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
    • PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。
    • PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。
    • PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。
    • PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    • PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。
    • PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。

    Spring 默认的事务传播行为是 PROPAGATION_REQUIRED,它适合于绝大多数的情况。假设 ServiveX#methodX() 都工作在事务环境下(即都被 Spring 事务增强了),假设程序中存在如下的调用链:Service1#method1()->Service2#method2()->Service3#method3(),那么这 3 个服务类的 3 个方法通过 Spring 的事务传播机制都工作在同一个事务中。

  • 相关阅读:
    函数式编程:用户登录和注册
    文件操作
    shell介绍
    函数返回值
    selenium 事件介绍
    Linux添加硬盘设备
    分布式系统中幂等性、at least once 和 at most once 问题
    HBase面试考点
    简单理解:数据库的一致性与四种隔离级别(+MySQL实现)
    大数据框架Hive优化方法
  • 原文地址:https://www.cnblogs.com/549294286/p/6022895.html
Copyright © 2020-2023  润新知