关于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事务传播的问题的主要内容,如果未能解决你的问题,请参考以下文章