propagation:传播行为

AI-摘要
LNotes-AI GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
propagation:传播行为
Liuxz事务传播行为(Propagation)定义了多个事务方法相互调用时,事务的创建、嵌套、隔离规则,核心解决 “方法调用时事务如何联动” 的问题。以下是 7 种传播行为及其特性的总结:
1. REQUIRED(默认值)
- 特性:如果当前有事务,就加入该事务;如果没有,就新建一个事务。
- 核心:“随大流”,所有操作合并到同一事务中,要么一起成功,要么一起回滚。
- 场景:大多数业务场景(如订单创建时同时扣库存、减余额)。
2. SUPPORTS
- 特性:如果当前有事务,就加入;如果没有,就以非事务方式执行(不开启事务)。
- 核心:“可选事务”,有无事务均可,不主动创建事务。
- 场景:查询操作(如订单详情查询,有事务则参与,无则直接执行)。
3. MANDATORY
- 特性:必须在已存在的事务中执行;如果当前没有事务,直接抛异常。
- 核心:“强制依赖”,自己不创建事务,必须依赖上层调用者的事务。
- 场景:核心操作(如资金扣减,必须在调用者的事务中执行,防止无事务时数据错乱)。
4. REQUIRES_NEW
- 特性:无论当前是否有事务,都新建一个独立事务;若当前有事务,则先暂停原事务,新事务执行完再恢复。
- 核心:“独立分家”,新事务与原事务完全隔离,各自独立提交 / 回滚。
- 场景:日志记录(主事务失败,日志仍需保存,避免丢失操作记录)。
5. NOT_SUPPORTED
- 特性:以非事务方式执行;若当前有事务,则暂停原事务,执行完后恢复。
- 核心:“拒绝事务”,不参与任何事务,强制非事务执行。
- 场景:耗时操作(如批量数据导出,避免事务长时间占用资源)。
6. NEVER
- 特性:必须以非事务方式执行;若当前有事务,直接抛异常。
- 核心:“严格禁止事务”,比 NOT_SUPPORTED 更严格,不允许在事务中执行。
- 场景:特殊操作(如某些不允许事务控制的脚本执行)。
7. NESTED
- 特性:如果当前有事务,就在嵌套事务中执行(依赖外层事务,有独立保存点);如果没有,就新建事务(同 REQUIRED)。
- 核心:“嵌套子事务”,外层事务回滚时,嵌套事务也回滚;但嵌套事务回滚时,外层事务可继续执行(通过保存点控制部分回滚)。
- 场景:复杂业务中的分步操作(如订单提交时,优惠券扣减失败可单独回滚,不影响订单其他步骤)。
关键特性对比
| 传播行为 | 是否创建新事务 | 与原事务的关系 | 回滚影响范围 |
|---|---|---|---|
| REQUIRED | 按需创建 | 融入原事务,共享一个事务 | 一起回滚 |
| REQUIRES_NEW | 强制创建 | 独立事务,原事务被暂停 | 各自独立回滚 |
| NESTED | 嵌套在原事务中 | 依赖原事务,有独立保存点 | 外层回滚影响内层,内层回滚不影响外层 |
理解传播行为的核心是:明确 “新方法是否需要事务”“与调用者事务的关系”“回滚时如何联动”,从而根据业务场景选择合适的规则,避免事务失效或数据不一致。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果



