今天在博客園看到有發布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)
事物是一個整體,結果就兩種(成功或者失敗)
要么全部成功(提交),要么全部失敗(回滾),就算成功一部分也要(回滾)
事物的四個特性
原子性:對數據進行操作的時候,要么全都執行,要么全都不執行。
一致性:和原子性是分不開的,事務執行成功,說明全部都執行了,那么就使數據庫從一個一致性狀態變到另一個一致性狀了。
隔離性: 一個事務的執行不能被其他事務干擾
持續性: 事務一旦提交成功,那么數據庫里的數據就會永久性的改變。