关于Spring事务传播的问题

Posted

技术标签:

【中文标题】关于Spring事务传播的问题【英文标题】:Question about Spring transaction propagation 【发布时间】:2011-02-14 19:10:24 【问题描述】:

我有一个关于 Spring事务传播的问题。

假设我使用@Transactional(propagation = Propagation.REQUIRED) 来注释一个方法m1()。当执行逻辑进入m1()时,如果已经有一个事务,m1()会使用那个事务。当m1()之后,交易呢?它会结束还是仍然开放? (如果我在另一个方法中调用m1(),并且调用之后还有其他事情要做)。

总之,我想知道当退出一个带注释的方法时,事务结束还是仍然保持打开状态?

非常感谢。

【问题讨论】:

【参考方案1】:

Propagation.REQUIRED(记录在here)将创建一个新事务(如果当前线程不存在),或者将加入现有事务(如果存在)。

当方法退出时,事务将完成(如果进入方法导致创建事务),或者将保持事务打开(如果在进入方法时事务已经存在)。换句话说,它是对称的,并且会使线程的事务状态保持与进入方法之前相同的状态。

【讨论】:

您好工作人员,关于我的问题,其他传播水平如何? @Yousui:我发布的链接中记录了各种传播级别及其影响。 谢谢工作人员,仔细阅读您的回答并做了一些测试,我了解了spring事务传播策略。非常感谢您的帮助。 @Yousui 你能发布你测试的场景吗?我很难理解 REQUIRED 与 REQUIRES_NEW 之间更精细的复杂性。我的事务边界是单独定义的,每个操作都是从外部流调用的,所以我基本上应该按顺序查看这些操作,但我仍然遇到问题。

以上是关于关于Spring事务传播的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于spring事务的传播性这篇文章解析的非常清楚了,建议是先收藏再看!

Spring事务隔离级别和传播特性

Spring事务隔离级别和传播特性

spring事物中的传播及隔离

Spring中的事务传播属性详解

18个示例详解 Spring 事务传播机制