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

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

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

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

非常感谢。

【问题讨论】:

    标签: java spring transactions


    【解决方案1】:

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

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

    【讨论】:

    • 您好工作人员,关于我的问题,其他传播水平如何?
    • @Yousui:我发布的链接中记录了各种传播级别及其影响。
    • 谢谢工作人员,仔细阅读您的回答并做了一些测试,我了解了spring事务传播策略。非常感谢您的帮助。
    • @Yousui 你能发布你测试的场景吗?我很难理解 REQUIRED 与 REQUIRES_NEW 之间更精细的复杂性。我的事务边界是单独定义的,每个操作都是从外部流调用的,所以我基本上应该按顺序查看这些操作,但我仍然遇到问题。
    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 2017-11-22
    • 2014-06-22
    • 2011-09-20
    • 2018-01-15
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多