【发布时间】:2022-01-23 12:34:17
【问题描述】:
我在不同的类中有方法 A 和方法 B。两者都用@Transactional 注释。方法 A 正在调用 B。是否有任何解决方案可以在不同的事务中调用 B 但不暂停 A 事务? B 上的 Propagation.REQUIRES_NEW 提供了在被调用但挂起调用者事务时始终创建新事务的可能性
【问题讨论】:
标签: spring spring-aop spring-annotations
我在不同的类中有方法 A 和方法 B。两者都用@Transactional 注释。方法 A 正在调用 B。是否有任何解决方案可以在不同的事务中调用 B 但不暂停 A 事务? B 上的 Propagation.REQUIRES_NEW 提供了在被调用但挂起调用者事务时始终创建新事务的可能性
【问题讨论】:
标签: spring spring-aop spring-annotations
事务传播行为Propagation.NESTED 支持要求。
请阅读 Spring 官方文档:Understanding PROPAGATION_NESTED
PROPAGATION_NESTED 使用单个物理事务和多个 它可以回滚到的保存点。这种部分回滚让 内部事务范围触发其范围的回滚,其中 外部交易能够继续物理交易 尽管一些操作已被回滚。
也可以在answer 中阅读有关 Spring 事务中嵌套传播的更多详细信息。
【讨论】:
据我所知,您无法使用注释 REQUIRED_NEW 来做到这一点。
但是 spring 也支持手动使用 TransactionTemplate、TransactionDefinition 进行事务。
我们可以通过一个 PlatformTransactionManager 使用多个定义。
【讨论】: