2011-08-31 174 views
1

我在想TransactionTemplate究竟是什么setPropagationBehavior。谁向谁传播什么?我认为这是有据可查的,但我并不了解这个PropagationBehavior的基本概念。Spring TransactionTemplate setPropagationBehavior

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

有人可以请一个基本的方式解释这里发生了什么,我熟悉数据库术语和交易功能,ACID等。

非常感谢。

回答

3

TransactionManager负责应用程序中的事务。 PropagationBehavior是一种告诉你的经理如何让交易行为的方式。 TransactionTemplate是一个辅助类,可以为你简化这一点。

required表示:

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

2.如果调用的方法是在非交易范围,将创造新的交易

编辑:我来了横跨this很好的文章处理web应用程序春天和多线程。我认为你应该阅读it

+0

好吧,如果新的线程开始新的交易,我不需要关心这个功能吗?我没有任何代码在做doInTransaction的多个调用。执行命令阻塞直到事务完成,不是吗? –

+0

excecute方法执行其回调的doInTransaction方法,然后提交或回滚事务,然后返回。 TransactionTemplate不处理可能由回调启动的线程。这些在事务上下文之外执行。 –

+0

交易划分是服务方式。这意味着交易的边界在这个工作完成的方法中。 Transation eather提交或在出现异常时回滚。这部分工作中的一切都不在这个事务上下文中。 – Eduard

2

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

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

相关问题