spring 事务提交成功后,再去发送事件
生活随笔
收集整理的這篇文章主要介紹了
spring 事务提交成功后,再去发送事件
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
TransactionSynchronizationManager.registerSynchronization( new TransactionSynchronizationAdapter() {@Overridepublic void afterCommit(){applicationContext.publishEvent( event );// 發(fā)送事件}} );
PS:
spring 在發(fā)送事務(wù)(applicationContext.publishEvent( event );)和@EventListener本來是擁有一個事務(wù),
但是, 我們在保證事務(wù)執(zhí)行成功之后再去接受事務(wù),導(dǎo)致沒有in progress的事務(wù)。所以如果需要在@EventListener端再去提交事務(wù)(保存數(shù)據(jù)),需要在方法上加上@Transactional(propagation=Propagation.REQUIRES_NEW)。
如果需要手動開啟事務(wù),可以使用Spring的PlatformTransactionManager 接口,
@Autowired private PlatformTransactionManager transactionManager; try{DefaultTransactionDefinition def = new DefaultTransactionDefinition();def.setPropagationBehavior( TransactionDefinition.PROPAGATION_REQUIRES_NEW );// 事務(wù)隔離級別,開啟新事務(wù)TransactionStatus status = transactionManager.getTransaction( def );//獲取事務(wù)狀態(tài),并開啟事務(wù),相當(dāng)于transation.begin(); saveMethod();// 邏輯保存數(shù)據(jù)的代碼 transactionManager.commit( status ); //提交事務(wù) } catch(Exception e) { transactionManager.rollback( status ); // 事務(wù)回滾 }本人java初級,如果有人看到,歡迎補充,歡迎拍磚。
總結(jié)
以上是生活随笔為你收集整理的spring 事务提交成功后,再去发送事件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sadfa
- 下一篇: F - 恐怖分子 CodeForces