2012-05-02 20 views
29
マルチスレッド

で春のトランザクションを使用するには?私の理解では、methodBはmethodAのトランザクションを添付します。methodAがmethodBの前に出る場合はどうなりますか?私は方法Aだけがトランザクションによってコミットされることができると思います。しかし、methodBはトランザクションが以前にコミットされたためコミットしません。どのように私は以下のようにメソッドを持って

methodBに@Transactional(propagation = Propagation.REQUIRES_NEW)を使用できますか?これにより、methodBは新しいトランザクションを持つことができます。しかし、spring docによると、methodAの変換はmethodBを呼び出すと中断されます。私はここで非常に混乱しているように感じます。

この問題についてお手伝いできますか?前もって感謝します。

+0

正確に何をしたいですか? –

答えて

23

いいえ、methodB()methodA()と同じトランザクションでは実行されません。 Springの@Transactionalは、単一スレッド上でのみ動作します。スレッドが最初に@Transactional(または@Transactionalのクラス内のメソッド)のメソッドを取り込んでセッションを作成し、そのメソッドを終了するときにコミットします。

この例では、スレッドプール内でジョブをスケジュールした後にトランザクションが終了します。 methodB()はそれ自身のトランザクションを持っています。

+0

同じトランザクションでないかどうかを監視する方法をアドバイスできますか?私が見つけたのは、トランザクションがコミットではなかったということでした。 – Jacky

+0

@Jacky 2つのトランザクションのどちらがコミットしないのですか? – jmruc

+0

メソッドBのトランザクションはコミットしません。 – Jacky

関連する問題