SpringBoot的事務中一種奇怪問題以及處理方法
阿新 • • 發佈:2018-12-05
Transaction註解在Spring中是事務,事務呢,簡單來說,就是放在一起的一組SQL操作。
那麼事務和普通的SQL有什麼不太一樣的地方呢?
- 原子性 (要麼全做,要麼不做)
- 一致性 (事務中的資料要一致,在有些時候是會出現不一致的情況的)
- 永續性 (這些修改最終是會存到資料庫的)
- 隔離性 (這一點主要是針對多執行緒環境)
什麼時候需要事務
如果我們一次會進行很多個SQL操作,那麼這個時候應該使用事務機制進行控制,尤其是對資料庫進行寫入的時候,就需要使用事務,一旦操作失敗,我們就可以使用這種機制進行挽回。
如果這一組SQL正確無誤的完成了,那麼就需要通過提交
回滾
來返回操作之前的狀態
SpringBoot的事務
只需要在進行這種操作的位置新增Transcation
註解就可以了。
這個註解就是為處理事務而準備的,他在Spring中通過AOP的方式實現,值得注意的是,事務如果成功完成,那麼他將會在AOP中AfterReturning
的時刻進行提交,我們如果希望在更新資料庫後馬上通知UI重新整理,那麼最好也在AfterReturning
中進行處理,否則就會出現一個很奇怪的現象,既,成功添加了資料,但是重新整理卻看不到新增的效果,這就是由於此時的事務尚未提交導致的。
因此我們在用AOP攔截需要重新整理介面的操作,使用AfterReturning在Transcation執行之後進行更新,在這個aspect中,需要新增order註解使得它在事務的AfterReturning之後執行,這樣就可以避免這種問題了。