@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 事务 REQUIRED 与 REQUIRES_NEW :回滚事务
当 Spring Propagation.REQUIRES_NEW 嵌套在 Propagation.NESTED 中时的行为