不喜欢长篇大论,不好记,所以自己总结了,如有错误请指正
传播方式 | 存在上级事务 | 不存在上级事务 | 适用场景 |
---|---|---|---|
REQUIRED(默认) | 合并 | 新建子事务并向下传播 | 最普遍,失败就一起回滚 |
REQUIRES_NEW | 新建子事务并向下传播 | 新建子事务并向下传播 | |
NESTED | 新建子事务并向下传播,正常结束前等待上级事务 | 新建子事务并向下传播 | |
SUPPORTS | 合并 | - | |
NOT_SUPPORTED | 挂起上级事务 | - | 写日志 |
MANDATORY | 合并 | 报错 | 核心业务代码 |
备注
子事务: 它不受上级事务异常回滚,但可以使上级事务回滚。
正常结束前等待: 事务注解的方法执行完成,但暂不提交。上级事务提交后提交,上级事务回滚后回滚。
挂起:它不受上级事务和自身异常回滚,但可以使上级事务回滚。
总结
- 无论当前方法怎么配置,只要报错,上级事务永远会回滚。
父母永远要对孩子的错误负责
- REQUIRED、SUPPORTS、MANDATORY会跟上级事务合并,任何一方失败都会完全回滚
事务合并 就像古代刑罚的株连九族,不管是父母还是儿女都要受罚
在发现没有上级事务时候, SUPPORTS直接不罚了(不开启事务),MANDATORY会把情况上报(报错)
- REQUIRES_NEW、NESTED会创建子事务,比上面说的三种更独立,不受上级影响(但可影响上级)
新建子事务 就像学校,小孩做错事,大人也要受罚(请家长),但是大人做错事不罚小孩
小孩做错事,REQUIRES_NEW是先罚小孩再罚大人,NESTED是等家长来了一起罚。
- NOT_SUPPORTED会挂起事务,不受任何异常影响而回滚
挂起事务 就像家里蹲,父辈负责孩子的衣食住行,但是家里蹲不去找工作,心安理得且自由散漫。