1. 程式人生 > >SpringBoot的事務中一種奇怪問題以及處理方法

SpringBoot的事務中一種奇怪問題以及處理方法

Transaction註解在Spring中是事務,事務呢,簡單來說,就是放在一起的一組SQL操作。


那麼事務和普通的SQL有什麼不太一樣的地方呢?

  • 原子性 (要麼全做,要麼不做)
  • 一致性 (事務中的資料要一致,在有些時候是會出現不一致的情況的)
  • 永續性 (這些修改最終是會存到資料庫的)
  • 隔離性 (這一點主要是針對多執行緒環境)

什麼時候需要事務

如果我們一次會進行很多個SQL操作,那麼這個時候應該使用事務機制進行控制,尤其是對資料庫進行寫入的時候,就需要使用事務,一旦操作失敗,我們就可以使用這種機制進行挽回。

如果這一組SQL正確無誤的完成了,那麼就需要通過提交

把資料儲存進資料庫,如果操作失敗,相應的可以通過回滾來返回操作之前的狀態

SpringBoot的事務

只需要在進行這種操作的位置新增Transcation註解就可以了。

這個註解就是為處理事務而準備的,他在Spring中通過AOP的方式實現,值得注意的是,事務如果成功完成,那麼他將會在AOP中AfterReturning的時刻進行提交,我們如果希望在更新資料庫後馬上通知UI重新整理,那麼最好也在AfterReturning中進行處理,否則就會出現一個很奇怪的現象,既,成功添加了資料,但是重新整理卻看不到新增的效果,這就是由於此時的事務尚未提交導致的。

因此我們在用AOP攔截需要重新整理介面的操作,使用AfterReturning在Transcation執行之後進行更新,在這個aspect中,需要新增order註解使得它在事務的AfterReturning之後執行,這樣就可以避免這種問題了。