Spring 事务传播机制,就是专门用来规定:
当一个事务方法调用另一个事务方法时,事务该如何传递和处理。
先记最核心的 7 个英文意思
1. REQUIRED
单词意思:需要的、要求的
你可以记成:
需要事务。
有事务我就加入,没有事务我就自己建一个。
所以:
REQUIRED = 需要事务,想办法进去。
2. REQUIRES_NEW
拆开看:
- REQUIRES = 需要
- NEW = 新的
所以就是:
需要一个新的事务。
不管外面有没有,我都要一个全新的 。
所以:
REQUIRES_NEW = 必须单开新事务。
记忆点很强:
看到 NEW 就想到"新开一桌"。
3. SUPPORTS
单词意思:支持、支持一下
你可以记成:
支持事务,但不强求。
有事务,我支持一下,跟着进去。
没有事务,我也能干。
所以:
SUPPORTS = 有就支持,没有也行。
4. MANDATORY

单词意思:强制的、必须的
这个很好记:
必须有事务。
没有事务就报错。
所以:
MANDATORY = 强制要求必须在事务里。
你可以联想 mandatory attendance
就是"强制出席"。
5. NOT_SUPPORTED
拆开看:
- NOT = 不
- SUPPORTED = 支持
意思就是:
不支持事务。
如果外面有事务,先挂起;
我自己按非事务方式执行。
所以:
NOT_SUPPORTED = 我不参与事务。
6. NEVER
单词意思:绝不、从不
这个更狠:
绝对不能有事务。
如果当前有事务,直接报错。
所以:
NEVER = 看到事务我就报错。
7. NESTED
单词意思:嵌套的
你可以立刻联想到:
大事务里套一个小事务。
所以:
NESTED = 嵌套事务。
用英文本义串起来记
你直接按下面这组背:
- REQUIRED:需要事务
- REQUIRES_NEW:需要一个新的事务
- SUPPORTS:支持事务,但不强求
- MANDATORY:强制必须有事务
- NOT_SUPPORTED:不支持事务
- NEVER:绝对不能有事务
- NESTED:嵌套事务
再给你分组记忆
A 组:想进事务的
REQUIRED
需要事务,没事务就建一个
REQUIRES_NEW
需要一个新的事务
SUPPORTS
支持事务,有就进,没有也行
这三个最常用。
B 组:态度很强硬的
MANDATORY
必须有事务
NEVER
绝对不能有事务
这两个是一对反义词,很好记:
- MANDATORY:必须有
- NEVER:绝不能有
C 组:不想参与事务的
NOT_SUPPORTED
不支持事务,外面有事务也先挂起
D 组:套娃型
NESTED
嵌套事务
最好背的一版口诀
你可以直接背这个:
Required 是"需要事务";
Requires New 是"需要新事务";
Supports 是"支持事务";
Mandatory 是"强制必须有事务";
Not Supported 是"不支持事务";
Never 是"绝不能有事务";
Nested 是"嵌套事务"。
面试时怎么说
Spring 事务传播机制里,英文其实就很好记。
REQUIRED是需要事务,所以有就加入,没有就新建;
REQUIRES_NEW是需要一个新的事务,所以不管外面有没有都单独开一个;
SUPPORTS是支持事务,所以有就加入,没有也能执行;
MANDATORY是强制的,表示必须在事务里;
NOT_SUPPORTED是不支持事务,表示要以非事务方式执行;
NEVER是绝不能有事务,有事务就报错;
NESTED就是嵌套事务。
超短背诵版
REQUIRED:需要事务
REQUIRES_NEW:需要新事务
SUPPORTS:支持事务
MANDATORY:必须有事务
NOT_SUPPORTED:不支持事务
NEVER:绝不能有事务
NESTED:嵌套事务