@Transaction
今天在進行數據庫的插入操作時接觸到@Transaction
在操作數據庫的方法上加上@Transaction,就代表該方法是一個事務。
對應到各數據庫,都會有自己的事務隔離級別。例如mysql有以下四種級別:
① Serializable (串行化):可避免髒讀、不可重複讀、幻讀的發生。
② Repeatable read (可重複讀):可避免髒讀、不可重複讀的發生。
③ Read committed (讀已提交):可避免髒讀的發生。
④ Read uncommitted (讀未提交):最低級別,任何情況都無法保證。
一般數據庫默認是第二個事務隔離級別。當給數據庫操作相關的方法加上@Transaction,對應到數據庫上的事務隔離,就可以避免併發操作引起的一些問題,例如數據的髒讀。
當加上@Transaction的數據庫相關操作發生異常時,數據操作會回滾,以保證數據的一致性。
一般只有當發生RuntimeException時纔會發生事務的回滾。但是要注意的一點是,當在有@Transaction的方法裏,如果捕獲並且解決了異常,並且是自己定義的異常,那麼事務是不會回滾的。必須要自己手動的在catch代碼裏寫回滾的操作。