@Transactional 的“REQUIRES_NEW”传播属性的真实世界用例是啥

Posted

技术标签:

【中文标题】@Transactional 的“REQUIRES_NEW”传播属性的真实世界用例是啥【英文标题】:What are the real world usecases of "REQUIRES_NEW" propagation attribute of @Transactional@Transactional 的“REQUIRES_NEW”传播属性的真实世界用例是什么 【发布时间】:2020-01-17 21:26:18 【问题描述】:

我是学习弹簧靴的新手。我想知道 @Transactional 注释的传播属性中 REQUIRES_NEW 的实际用例是什么。

我知道,如果新事务的请求到达,它会暂停正在进行的事务,然后在完成新请求的事务后恢复。

【问题讨论】:

【参考方案1】:

我认为Understanding transaction pitfalls 的文章很好地解释了它:

仅当被调用方法中的数据库操作需要保存到数据库时才应使用 REQUIRES_NEW 事务属性,而不管覆盖事务的结果如何。例如,假设每次尝试的股票交易都必须记录在审计数据库中。无论交易是否由于验证错误、资金不足或其他原因而失败,都需要保留此信息。如果您没有在审计方法上使用 REQUIRES_NEW 属性,审计记录将与尝试的交易一起回滚。使用 REQUIRES_NEW 属性可以保证无论初始事务的结果如何,都可以保存审计数据。

【讨论】:

以上是关于@Transactional 的“REQUIRES_NEW”传播属性的真实世界用例是啥的主要内容,如果未能解决你的问题,请参考以下文章

spring @Transactional的理解

spring @Transactional的理解

Spring 事务 REQUIRED 与 REQUIRES_NEW :回滚事务

Spring在一个事务中开启另一个事务

当 Spring Propagation.REQUIRES_NEW 嵌套在 Propagation.NESTED 中时的行为

Propagation.REQUIRES_NEW 不会在 Spring 中使用 JPA 创建新事务