spring事務の提出が成功したら、イベントを送りに行きます.

1121 ワード

TransactionSynchronizationManager.registerSynchronization( new TransactionSynchronizationAdapter() {
      @Override
      public void afterCommit()
      {
        applicationContext.publishEvent( event );//     
      }
    } );
PS:
springは送信事務(appication Contect.publishEvent)と@Event Listenerはもともと一つの事務を持っています.
しかし、私達は事務の実行が成功したことを保証した後で事務を受け入れて、インプログレスの事務がないことを招きます.だから@EventListener側で事務(データ保存)を提出する必要がある場合は、方法に@Transationを追加する必要があります.
手動でイベントを開く必要があれば、SpringのPlatform Transation Managerインターフェイスを使用してもいいです.
@Autowired
private PlatformTransactionManager transactionManager;
try{
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior( TransactionDefinition.PROPAGATION_REQUIRES_NEW );//       ,     
    TransactionStatus status = transactionManager.getTransaction( def );//      ,     ,   transation.begin(); 
	saveMethod();//           
	transactionManager.commit( status ); //    
}
catch(Exception e)
{ 
	transactionManager.rollback( status ); //     
}
私はjava初級です.もし誰かが見たら、補充を歓迎します.