1. @Transactional 的传播行为(Propagation)的 7 种语义
请说明 @Transactional 的 7 种传播行为(Propagation)各自的语义?
- REQUIRED、REQUIRES_NEW、SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER、NESTED
- 每条传播行为的语义与适用场景
- 传播行为的嵌套调用表现
@Transactional 的 7 种传播行为(Propagation):REQUIRED(默认,存在事务则加入,否则新建);REQUIRES_NEW(总是新建独立事务,挂起当前事务);SUPPORTS(有事务则加入,无事务则非事务执行);NOT_SUPPORTED(以非事务方式执行,挂起当前事务);MANDATORY(必须有事务,否则抛异常);NEVER(必须无事务,有事务则抛异常);NESTED(嵌套事务,存在事务则新建带保存点的事务,否则按 REQUIRED)。各传播控制事务的加入/新建/挂起/嵌套,是声明式事务的核心语义。
传播行为决定"方法运行时如何参与事务"。REQUIRED 最常用(加入现有事务),REQUIRES_NEW 用于独立提交,NESTED 用于部分回滚(保存点)。理解传播语义是配置事务边界的基础。