首先了解什麼事事務,和一些基本概念。
什麼是事務: 事務(transaction)是訪問並可能更新資料庫中各種資料項的乙個程式執行單元(unit)。
事務的四大特性
事務的特性-acid:
原子性(atomicity)
一致性(consistency)
隔離性(isolation)
永續性(durability)
事務的特性-原子性:
事務中的操作,要麼全做成,要麼都不做
事務是不可拆分的
事務必須以 commit/rollback 結束
事務的特性-一致性:
單獨執行的事務,必須保證保持資料庫的一致狀態
從乙個一致狀態遷移到另乙個一致狀態
與原子性相關
事務的特性-隔離性:
多個併發事務之間不能相互干擾
併發不影響事務的執行
事務的特性-永續性:
一旦事務成功完成(commit),它對資料庫的更新應該是持久的
即使在寫入磁碟之前,系統發生故障
在下次啟動之後,也應保障資料更新的有效
所以在我們的程式中,對於多次運算元據庫的地方加入事務是很有必要的。那麼怎麼在spring3中加入事務呢?有了註解一切都很簡單,首先在spring的配置檔案中加入以下**
在service使用的時候只需要在該類或該介面實現類得某個方法上加上@transactional即完成了對事務的管理,如果注釋的是介面,則該介面的所有實現類都將被事務化。
使用註解事務注意事項:
1. 在service層不要對異常進行攔截,要對異常進行丟擲!
2. 註解事務只能對public的方法可用,其它方法加入了無效,也可以把註解加在class上面這樣當前類的所有公共方法都新增了事務功能
3. 在介面中新增了註解事務它的所有實現介面都將具有事務特性.建議不要加將註解加在介面上
4. 預設情況下,乙個有事務方法, 遇到runtiomeexception 時會回滾 . 遇到 受檢查的異常 是不會回滾 的. 要想所有異常都回滾,要加上 @transactional( rollbackfor=)
關於spring事務
在oracle資料庫中,一般ddl語句是隱式commit提交的,所以在修改表或者建立表時,不寫commit也會執行。但一條sql的時候,如果不顯示commit sql便不會持久化到資料庫。在spring中,jdbctemplate操作採用的是jdbc預設的autocommit模式,當沒有顯示指定事務...
Spring事務(一) Spring事務的使用
事務的經典舉例 某人要在商店使用電子貨幣購買100元的東西,當中至少包括兩個操作 該人賬戶減少100元 商店賬戶增加100元 事務就是要確保以上兩個操作 都能完成 或者 一起取消,否則就會出現100元平白消失或出現的情況。摘自wiki spring事務有兩種方式 程式設計式事務管理 宣告式事務管理 ...
Spring事務(二) Spring事務的特點
實現事務必須滿足以下四大特性 隔離性 通過mvvc實現 相對應的有mvcc 原子性 一致性 永續性 通過資料庫的redo log undo log force log at commit實現 資料庫是可以控制事務的傳播和隔離級別的,spring在之上又進一步做了封裝,本質上是同一概念。事務的四大特性...