2016-04-13 64 views
0

bir yöntem şöyle ilan etti:İlkbaharda eşzamanlı işlemler ve @ TransactionalEventListener sırası? Ben varsa

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

T2 önce iki eşzamanlı işlemler, T1 ve T2 ve (biraz) T1 uçları olduğu göz önüne alındığında:

  1. Will afterTxCommit eşzamanlı çağrılabilir'dan önce T1için T2 varsayılan Spring yapılandırması için çağrıldı?
  2. Eğer durum böyle değilse, afterTxCommit'un işlemlerin yapıldığı sırayla eşzamanlı olarak yürütülmesini garantilemek için Spring'i nasıl yapılandırabilirsiniz?

cevap

1
  1. sayılı dinleyici işlem ile aynı iplik çağrılır. Yani, iki işlem eşzamanlı olarak yürütülürse, dinleyicileri de aynı anda çağrılır.
  2. Bu dinleyici yönteminin tanımlandığı Spring bean bir tekilse, synchronized yapılıyorsa, yöntemin her seferinde bir iş parçacığı tarafından yürütüleceğinden emin olun, ancak siparişte hiçbir garanti yoktur: iş parçacığı zamanlayıcı Birincisi ilk olsa bile, ilk işlemin dinleyicisinden önce ikinci işlemin dinleyicisini çağırmayı seçin. Oldukça eminim ki, Spring'i konfigüre ederek istediğini yapmanın bir yolu yoktur.

Bana bir tasarım kokusu gibi geliyor: iki eşzamanlı işlem eşzamanlıysa, bağımsız olmalı ve sipariş önemli olmamalı. Ama neyi başarmaya çalıştığınızı bilmeden somut bir şey tavsiye etmek zor.