@transactional作用和事務


今天在博客園看到有發布spring的注解,留意到@transactional這個注解。立馬就百度。學習了

使用這個注解的類或者方法表示該類里面的所有方法或者這個方法的事務由spring處理,來保證事務的原子性,即是方法里面對數據庫操作,如果失敗則spring負責回滾操作,成功則提交操作。

@Transactional 可以作用於接口、接口方法、類以及類方法上。當作用於類上時,該類的所有 public 方法將都具有該類型的事務屬性,同時,我們也可以在方法級別使用該標注來覆蓋類級別的定義。

@Transactional 注解應該只被應用到 public 方法上,如果你在 protected、private 或者默認可見性的方法上使用 @Transactional 注解,這將被忽略,也不會拋出任何異常。

@Transactional屬性

value String 可選的限定描述符,指定使用的事務管理器
propagation enum: Propagation 可選的事務傳播行為設置
isolation enum: Isolation 可選的事務隔離級別設置
readOnly boolean 讀寫或只讀事務,默認讀寫
timeout int (in seconds granularity) 事務超時時間設置
rollbackFor Class對象數組,必須繼承自Throwable 導致事務回滾的異常類數組
rollbackForClassName 類名數組,必須繼承自Throwable 導致事務回滾的異常類名字數組
noRollbackFor Class對象數組,必須繼承自Throwable 不會導致事務回滾的異常類數組
noRollbackForClassName 類名數組,必須繼承自Throwable 不會導致事務回滾的異常類名字數組

順帶提及事物(來源 https://www.jianshu.com/p/bcfd48c4cbf4)

  事物是一個整體,結果就兩種(成功或者失敗)

  要么全部成功(提交),要么全部失敗(回滾),就算成功一部分也要(回滾)

事物的四個特性

  原子性:對數據進行操作的時候,要么全都執行,要么全都不執行。

  一致性:和原子性是分不開的,事務執行成功,說明全部都執行了,那么就使數據庫從一個一致性狀態變到另一個一致性狀了。

  隔離性: 一個事務的執行不能被其他事務干擾

  持續性: 事務一旦提交成功,那么數據庫里的數據就會永久性的改變。

舉個例子:

1.把一條數據插入到倆張表的時候,就要用到事務了。

數據是 data 表示。

如果 data在插入第一張表的時候成功了,在插入第二張表的時候失敗了,怎么辦?
要么保證全部成功(提交),要么就回滾(一條也別成功)。才能保證數據的准確性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM