Spring事务传播方式对事务提交回滚的影响
主要测试的几大事务传播方式
- REQUIRES (默认)必定有事务,调用方有事务时加入,没有时创建一个事务
- NOT_SUPPORTED 必定无事务
- NEW_REQUIRES 必定创建一个新事务,与调用方事务存在隔离,异常时不会使调用方事务标记为rollback-only,适合在【被调用方】不想因为【调用方】异常影响事务提交时使用
- NESTED 嵌套事务,与调用方事务无隔离,异常时不会使调用方事务标记为rollback-only,适合在【调用方】不想因为【被调用方】异常影响事务提交时使用
- 无@Transaction
调用情况(@Transaction(rollbackFor = Exception))
1、场景一
| 正常执行无异常 | 和调用方事务一起提交 | REQUIRES |
| NESTED | ||
| 无@Transaction | ||
| 被调用完后立即提交事务 | NEW_REQUIRES | |
| NOT_SUPPORTED |
2、场景二
| 调用方出现异常 | 和调用方事务一起回滚 | REQUIRES |
| NESTED | ||
| 无@Transaction | ||
| 不和调用方事务一起回滚 | NEW_REQUIRES | |
| NOT_SUPPORTED |
3、场景三
| 被调用方出现异常(try catch包裹调用) | 调用方事务被标记rollback-only,在最终提交时回滚 | REQUIRES |
| 调用方不受影响,正常提交。被调用方事务回滚 | NESTED | |
| NEW_REQUIRES | ||
| 调用方不受影响,正常提交。被调用方无事务,不回滚 | NOT_SUPPORTED | |
| 无@Transaction |
浙公网安备 33010602011771号