0

我有一个使用 Spring 中的事务模板以编程方式启动事务的方法。

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

    Setpropgation to requires new....

    /// do my stuff in trasaction


}

因此,如果我有另一个调用此方法的类,它会创建一个事务,正如我所期望的那样。但是如果从同一个调用线程再次进入这个方法会发生什么。是否创建了另一个事务?

例子:

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

继:

此外,如果 class is @autowired,考虑到一个实例存在,两个调用线程是否会共享同一个事务?

我不会假设他们在该方法的堆栈上有自己的条目。

4

1 回答 1

0

上的 javadocPropagation.REQUIRES_NEW很清楚,我不确定是否可以更好地解释。

至于调用您的方法的不同线程:这TransactionManager将确保线程不会在事务方面相互交错。

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

于 2013-02-28T17:01:58.343 回答