事物的传播行为以及应用场景

本文详细介绍了七种事务传播行为:PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER和PROPAGATION_NESTED。每种行为的含义、适用场景及其在service1和服务2调用中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事物的传播行为有七种,不仅要知道这七种分别是什么意思,还要知道分别适合哪种场景使用。
service1中调用了service2方法,则service2可以定义以下不同事物传播行为

  1. PROPAGATION_REQUIRED
    解释:如果当前存在事物,则加入该事物;如果不存在事物,则创建一个新的事物。该行为一般被设置为默认
    场景:service2要至少保证在一个事物中运行
  2. PROPAGATION_SUPPORTS
    解释:如果当前存在事物,则加入该事物;如果不存在事物,则直接执行
    场景:适合查询方法。这种行为中如果service1启动了一个事物,service2能够加入到这个事物中去,从而能够读取service1当前修改的数据,否则会由于事物未提交无法读取service1修改的数据(隔离级别大于未提交读)
  3. PROPAGATION_MANDATORY
    解释:强制要求当前存在一个事物,如果不存在则抛出异常
    场景:service2需要事物支持但自身又不管理食物提交或回滚,即强制要求前面的方法创建并管理一个事物给它用
  4. PROPAGATION_REQUIRES_NEW
    解释:不管当前是否存在事物,必定创建一个新事物,如果当前存在事物这个事物会被挂起。新事物在层级上与之前的事物是平级的,两者互不干扰
    场景:如service2事物的失败不想影响到service1事物的成功提交,可以使用这个行为
  5. PROPAGATION_NOT_SUPPORTED
    解释:不支持当前事务,若存在则挂起(能不能挂起还得看对应的事务管理器是否支持挂起事物)
    场景:略
  6. PROPAGATION_NEVER
    解释:永远不使用事物,如果存在事物,抛出异常
    场景:略
  7. PROPAGATION_NESTED
    解释:如果不存在事物,则创建一个新的;如果存在事物,则在当前事务的一个嵌套事物中执行,嵌套事物的层级关系是外层事物的子事物,子事物执行的时候,外层事物不会被挂起,且子事物与外层事物共有事物状态(没有隔离)
    场景:将一个大事物分解为多个小事物执行,根据小事物的执行状态决定大事物的执行流程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值