【问题标题】:Spring TransactionTemplate setPropagationBehaviorSpring TransactionTemplate setPropagationBehavior
【发布时间】:2011-11-07 19:07:51
【问题描述】:

我想知道TransactionTemplate 中的setPropagationBehavior 到底是做什么的。谁向谁传播什么?我看到它有据可查,但我不了解这个 PropagationBehavior 的基本概念。

默认是PROPAGATION_REQUIRED,这是什么意思?模板是否报告(传播)失败,反之亦然?

谁能简单解释一下这里发生了什么,我熟悉数据库术语和事务功能、ACID 等。

非常感谢。

【问题讨论】:

    标签: java database spring jdbc transactions


    【解决方案1】:

    TransactionManager 负责处理应用程序中的事务。 PropagationBehavior 是一种告诉您的经理您希望交易如何进行的方式。 TransactionTemplate 是一个帮助类来为你简化这个。

    必需的意思是:

    1.如果调用方法已经在一个事务中,它将使用同一个事务

    2.如果调用方法在非事务范围内,它将创建新事务

    编辑:我遇到了this 非常好的文章,涉及 web 应用程序 spring 和多线程。我认为你应该阅读it

    【讨论】:

    • 好的,如果要为新线程启动新事务,我不需要关心这个特性吗?我没有任何代码可以多次调用 doInTransaction。执行命令会阻塞直到事务完成,不是吗?
    • excecute方法执行其回调的doInTransaction方法,然后提交或回滚事务,然后返回。 TransactionTemplate 不处理可能由回调启动的线程。这些在事务上下文之外执行。
    • 事务的划分是服务方式。这意味着事务的边界在完成工作的这个方法内。事务要么提交,要么在出现异常时回滚。这个工作单元之外的一切都在这个事务上下文之外。
    • 我编辑了我的答案,我在其中添加了一篇关于多线程和弹簧的好文章的链接。
    【解决方案2】:

    传播不是传播失败。 REQUIRED 表示:如果已经有事务在运行,则在当前事务中执行工作(在模板回调中)。如果没有事务在运行,则启动一个新事务,在回调中执行工作,然后提交事务(如果有运行时异常则回滚)。

    在所有情况下,运行时异常总是传播给调用者。它还会导致事务回滚,即使它不是由此模板启动的。

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多