2013-02-28 135 views
0

我有一个方法使用Spring的事务模板以编程方式启动事务。递归调用的春季交易

Void methodA() { 
    TransactionTmeplate.......... 

    Setpropgation to requires new.... 

    /// do my stuff in trasaction 


} 

因此,如果我有另一个类调用此方法,它会创建一个事务,如我所料。但是如果再次从同一调用线程输入此方法会发生什么情况。是否创建另一个事务?

例子:

MethodCaller -> methodA (transaction created) -> methodD -> methodA(??) 

继:

此外,如果类是@autowired,将两张电话线曾经共享相同的事务,考虑一个实例存在?

我会假设不是因为他们有方法的堆栈上有自己的条目。

+0

什么样的逻辑会完成这样的事情?交易应该是一个逻辑单一的逻辑。我会说这有代码味 – thatidiotguy 2013-02-28 16:58:24

+0

是的,我同意......但即时通讯尝试遵循一些代码和行为......看起来像这样......因为即时通讯再次写入......我想确定交易和他们是如何工作的...什么是可能什么不是... – user1555190 2013-02-28 17:02:47

回答

0

Propagation.REQUIRES_NEW上的javadoc非常清晰,我不确定是否可以更好地解释它。

至于不同的线程调用你的方法:TransactionManager将确保线程不会交互彼此交易。

但是有一个可重入的方法并且总是启动一个新的事务,这表明你的应用程序没有正确分层。尝试做一些重构,并确保负责启动新事务的方法不会被递归调用。

+0

yeap我同意....谢谢... :) – user1555190 2013-02-28 17:07:48