Springboot的@Transaction關鍵字

@Transaction

今天在進行數據庫的插入操作時接觸到@Transaction

在操作數據庫的方法上加上@Transaction,就代表該方法是一個事務。

對應到各數據庫,都會有自己的事務隔離級別。例如mysql有以下四種級別:

  ① Serializable (串行化):可避免髒讀、不可重複讀、幻讀的發生。

  ② Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。

  ③ Read committed (讀已提交):可避免髒讀的發生。

  ④ Read uncommitted (讀未提交):最低級別,任何情況都無法保證。

一般數據庫默認是第二個事務隔離級別。當給數據庫操作相關的方法加上@Transaction,對應到數據庫上的事務隔離,就可以避免併發操作引起的一些問題,例如數據的髒讀。

當加上@Transaction的數據庫相關操作發生異常時,數據操作會回滾,以保證數據的一致性。

一般只有當發生RuntimeException時纔會發生事務的回滾。但是要注意的一點是,當在有@Transaction的方法裏,如果捕獲並且解決了異常,並且是自己定義的異常,那麼事務是不會回滾的。必須要自己手動的在catch代碼裏寫回滾的操作。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章