Java 递归调用上的Spring事务

Java 递归调用上的Spring事务,java,spring,transactions,Java,Spring,Transactions,我有一个方法,它使用Spring中的事务模板以编程方式启动事务 Void methodA() { TransactionTmeplate.......... Setpropgation to requires new.... /// do my stuff in trasaction } 所以,如果我有另一个类调用这个方法,它会创建一个事务,正如我所期望的那样。但是,如果从同一调用线程再次输入此方法,会发生什么情况。是否创建了另一个事务 例如: MethodCa

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

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

    Setpropgation to requires new....

    /// do my stuff in trasaction


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

例如:

MethodCaller -> methodA (transaction created) -> methodD -> methodA(??)
以下为:

另外,如果类是
@autowired
,那么考虑到存在一个实例,两个调用线程是否会共享同一事务

我想不会,因为他们在堆栈上有自己的方法条目。

上的javadoc非常清楚,我不确定是否可以更好地解释它

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


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

什么样的逻辑可以完成这样的任务?一个事务应该是一个单一的逻辑过程。我会说这有代码是的我同意。。。但是我试着遵循一些规则和行为。。。好像是这样。。。既然我又写了一遍。。。我想确定交易以及它们是如何运作的。。。什么是可能的什么不是。。。