@Transactional開啟事務導致AbstractRoutingDataSource動態資料來源無法切換的解決方案

小阿陽啊發表於2020-11-11

問題場景:

下圖是定時推送資料的介面,它做的操作是定時獲取A表資料向圖二的接收資料介面推送資料,並且修改A表的更新狀態欄位。

圖一
下圖是接收推送資料的介面,它做的操作是接收推送過來的A表的資料然後插入到B表。

圖二

下圖是定時推送資料介面的業務邏輯方法的實現層。

圖三

在下圖65行處我模擬了異常的發生,然後系統回滾出現了異常,詳見圖四,報了一個物件名無效的錯誤,並且沒有進行事務回滾,但是執行成功了推送資料介面中的修改更新A表欄位的方法。相當於做推送方法的時候發生了異常,就直接連線A庫了,不再進行切換。

圖四

問題描述:

當程式出現異常後,事務回滾無法切換資料來源

解決方案:

需要在controller層先切到要進行資料操作的資料庫上來,這樣後面再呼叫有事務的方法時,就能保持在當前庫的連線上了,後面的事務回滾也就生效了

簡單一句話:首先切換庫,再配置事務

圖五

圖六

相關文章