spring執行事務提交後進行一些邏輯操作

2022-08-09 09:21:12 字數 697 閱讀 8537

在使用spring事務時,我們通常會把事務內的所有操作當成是乙個原子操作。也就是當整個事務內的所有**都執行完成後, 才會將所有的資料落實到資料庫中。這樣做有時也會給我們造成麻煩。比如以下場景:

根據圖中描述的邏輯,如果我們把前兩步封裝到乙個事務方法中,會造成當第三方服務**我們服務時,我們根據id去查詢記錄時,發現記錄不存在。

這說明,我們第一步執行的方法並沒有生效。原因就是因為第1步和第2步同時存在於乙個事務中,所以當執行第二步時, 資料庫並沒有生效,而此時,

第三方服務如果處理比較快的時候,會立即**我們,造成我們庫裡面查不到資料的情況。

解決方案:我們可以讓第二步在第一步完全執行完成之後再去執行,這個時候就需要用到事務後提交操作。

demo: 

在事務方法中寫入如下**:decisionservice.restdecision(bestbuyorder);就是我們圖中所說的步驟2.這樣就可以保證在步驟1完全入庫後再執行步驟2.這樣再查詢就不會出現查不到的情況了。

transactionsynchronizationmanager.registersynchronization(new

transactionsynchronizationadapter()

});

spring進行事務管理

用jdbc的事務管理器 datasourcetransactionmanager 而啟用事務註解中的transaction manager值必須是trasactionmanager,若配置的事務管理器的id為trasactionmanager,nametransaction manager可以不寫 ...

spring事務操作後進行非同步操作

開發中有很多需要事務a操作後進行非同步b操作,如傳送mq,或者開執行緒做其他事情.有一部分的非同步操作需要查詢當前事務方法的儲存 修改資料.所以,如果直接在事務方法中呼叫非同步方法的話,如果非同步方法的邏輯查詢對應的資料庫記錄時,還沒有刷到資料庫,那就會獲取不到最新值 解決方法 方案一 呼叫非同步的...

Spring框架用註解進行事務控制

今天糾結了一天呀 就為了個註解事務控制。其實很久以前就用過了,今天還是照原來的方法配置,以為半個小時搞定.結果死活不行!oh,my god!各種方法,各種測試,都不行。一天就這樣快過去了。突然發現,不會是資料庫驅動問題吧.帶著絕望的心情,換了個驅動。測試,資料回滾了.資料回滾啦!fuxx,不爆粗不足...