Spring 事務——事務介紹以及事務在Spring框架中的基本實現
阿新 • • 發佈:2018-11-10
事務介紹
事務一般發生在和持久層打交道的地方,比如資料庫。
假設一個工作由兩件事共同組成,那麼這兩件事要麼全部完成,這個工作才算完成。要麼全部回退到初始狀態。不存在只完成一件,還有一件事沒完成的。這項工作可稱為一個事務。常用的場景就是銀行轉賬。A向B轉賬100元這項工作由兩件事組成:A帳戶減100元,B賬戶加100元。這兩件事要麼同時完成,要麼同時都回退到初始狀態。如果只完成其中一件,另一件沒完成,那就出岔子了。。
事務四大特性:ACID
原子性(Atomicity):事務是一個原子操作,由一系列動作組成。事務的原子性確保動作要麼全部完成,要麼完全不起作用。
一致性(Consistency)
隔離性(Isolation):可能有許多事務會同時處理相同的資料,因此每個事務都應該與其他事務隔離開來,防止資料損壞。
永續性(Durability):一旦事務完成,無論發生什麼系統錯誤,它的結果都不應該受到影響,這樣就能從任何系統崩潰中恢復過來。通常情況下,事務的結果被寫到持久化儲存器中。
Spring事務支援
Spring可以使用程式設計式事務,也可以使用宣告式事務。不過一般用的多的是用宣告式。
Spring使用AOP生成一個代理物件來支援宣告式事務,使得我們無需要去處理獲得連線、關閉連線、事務提交和回滾等這些操作。再也無需要我們在與事務相關的方法中處理大量的try…catch…finally程式碼。
比如,我們聲明瞭一個事務方法methodTest()
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void methodTest() {
// do something
}
當呼叫
main{
methodTest();
}
相當於執行(只是舉個例子,虛擬碼。不同的事務管理器內部實現都不同)
Main{ Connection con=null; try{ con = getConnection(); con.setAutoCommit(false); //方法呼叫 methodTest(); //提交事務 con.commit(); } Catch(RuntimeException ex){ //回滾事務 con.rollback(); } finally{ //釋放資源 closeCon(); } }