2016-04-13 68 views
0

は、この方法は、このように宣言:Springでの並行トランザクションと@TransactionalEventListenerの順序?私が持っている場合は

@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) 
public void afterTxCommit(MyObject myObject) { 
    .... 
} 

T2前に2つの同時実行トランザクション、T1T2、及び(やや)T1両端があることを考える:

  1. ウィルafterTxCommit同期的に呼び出されますT1の場合は、の前に、デフォルトのSpring設定でT2が呼び出されますか?
  2. これが当てはまらない場合、afterTxCommitがトランザクションがコミットされたのと同じ順序で同期して実行されることを保証するために、Springをどのように構成できますか?

答えて

1
  1. いいえリスナーは、トランザクションと同じスレッドで呼び出されます。したがって、2つのトランザクションが同時に実行されると、それらのリスナーも同時に呼び出されます。
  2. このリスナメソッドが定義されているSpring Beanがシングルトンである場合、それを​​にすると、一度に1つのスレッドでメソッドが実行されることが保証されますが、スレッドスケジューラは最初のコミットが最初にコミットされたとしても、最初のリスナーの前に2番目のトランザクションのリスナーを呼び出すことを選択します。 Springを設定するだけで、あなたが望むことをする方法がないと確信しています。

これは、私にはデザインの匂いのように聞こえます.2つの並行トランザクションが並行していると、それらは独立していて、順序は重要ではありません。しかし、達成しようとしていることを知らずに具体的なことをアドバイスするのは難しいです。

関連する問題