問題描述:有時候會有這種場景,一個事務方法中,有兩步操作,操作一爲插入數據庫操作,操作二把操作一插入數據的id發給其他系統,其他系統拿到id後來查詢數據,但是會發現有時候系統運行比較快的時候,查詢數據會查不到。
原因:因爲兩步操作都是在一個事務方法中的,操作二雖然拿到了操作一插入數據的id,然後發給了其他系統,但是這個時候,其實還不能保證事務已經提交了,所以其他的系統通過id來查詢數據,會發現有時候查不到。
解決辦法:
方法一: 把操作二從事務方法中分離出來,然後放到事務方法後面去執行;
方法二:在事務方法中加入如下代碼:
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
//操作二
}
});