0

Springのトランザクションテンプレートを使用してプログラムでトランザクションを開始するメソッドがあります。

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

    Setpropgation to requires new....

    /// do my stuff in trasaction


}

したがって、このメソッドを呼び出す別のクラスがある場合は、予想どおり、トランザクションが作成されます。しかし、このメソッドが同じ呼び出しスレッドから再度入力された場合はどうなりますか。別のトランザクションが作成されますか?

例:

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

続く:

また、クラスが@autowiredの場合、1つのインスタンスが存在することを考慮して、2つの呼び出しスレッドが同じトランザクションを共有することはありますか?

メソッドのスタックに独自のエントリがあるので、私はそうは思わないでしょう。

4

1 に答える 1

0

javadocPropagation.REQUIRES_NEWは非常に明確ですが、より適切に説明できるかどうかはわかりません。

メソッドを呼び出すさまざまなスレッドについては、TransactionManagerスレッドがトランザクションに関して互いにインターリーブしないようにします。

しかし、再入可能で、常に新しいトランザクションを開始するメソッドがあるということは、アプリケーションが適切に階層化されていないことを示しています。リファクタリングを試み、新しいトランザクションの開始を担当するメソッドが再帰的に呼び出されないようにしてください。

于 2013-02-28T17:01:58.343 に答える