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

2025-08-18 00:18:08

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

最新推荐文章于 2025-06-13 20:15:04 发布

原创

最新推荐文章于 2025-06-13 20:15:04 发布

·

2.8k 阅读

·

3

·

17

·

CC 4.0 BY-SA版权

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

java

同时被 2 个专栏收录

47 篇文章

订阅专栏

spring

12 篇文章

订阅专栏

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

摘要生成于

C知道

,由 DeepSeek-R1 满血版支持,

前往体验 >

事物的传播行为有七种,不仅要知道这七种分别是什么意思,还要知道分别适合哪种场景使用。

在service1中调用了service2方法,则service2可以定义以下不同事物传播行为

PROPAGATION_REQUIRED

解释:如果当前存在事物,则加入该事物;如果不存在事物,则创建一个新的事物。该行为一般被设置为默认

场景:service2要至少保证在一个事物中运行PROPAGATION_SUPPORTS

解释:如果当前存在事物,则加入该事物;如果不存在事物,则直接执行

场景:适合查询方法。这种行为中如果service1启动了一个事物,service2能够加入到这个事物中去,从而能够读取service1当前修改的数据,否则会由于事物未提交无法读取service1修改的数据(隔离级别大于未提交读)PROPAGATION_MANDATORY

解释:强制要求当前存在一个事物,如果不存在则抛出异常

场景:service2需要事物支持但自身又不管理食物提交或回滚,即强制要求前面的方法创建并管理一个事物给它用PROPAGATION_REQUIRES_NEW

解释:不管当前是否存在事物,必定创建一个新事物,如果当前存在事物这个事物会被挂起。新事物在层级上与之前的事物是平级的,两者互不干扰

场景:如service2事物的失败不想影响到service1事物的成功提交,可以使用这个行为PROPAGATION_NOT_SUPPORTED

解释:不支持当前事务,若存在则挂起(能不能挂起还得看对应的事务管理器是否支持挂起事物)

场景:略PROPAGATION_NEVER

解释:永远不使用事物,如果存在事物,抛出异常

场景:略PROPAGATION_NESTED

解释:如果不存在事物,则创建一个新的;如果存在事物,则在当前事务的一个嵌套事物中执行,嵌套事物的层级关系是外层事物的子事物,子事物执行的时候,外层事物不会被挂起,且子事物与外层事物共有事物状态(没有隔离)

场景:将一个大事物分解为多个小事物执行,根据小事物的执行状态决定大事物的执行流程