標籤:ola 特定 管理系統 pojo scom src col name status
交易管理
一個資料庫事務是一個被視為單一的工作單元的操作序列。這些操作應該要麼完整地執行,要麼完全不執行。交易管理是一個重要組成部分,RDBMS 面向公司專屬應用程式程式,以確保資料完整性和一致性。事務的概念可以描述為具有以下四個關鍵屬性說成是 ACID:
原子性:事務應該當作一個單獨單元的操作,這意味著整個序列操作要麼是成功,要麼是失敗的。
一致性:這表示資料庫的參考完整性的一致性,表中唯一的主鍵等。
隔離性:可能同時處理很多有相同的資料集的事務,每個事務應該與其他事務隔離,以防止資料損毀。
- 持久性:一個事務一旦完成全部操作後,這個事務的結果必須是永久性的,不能因系統故障而從資料庫中刪除。
一個真正的 RDBMS 資料庫系統將為每個事務保證所有的四個屬性。使用 SQL 發布到資料庫中的事務的簡單視圖如下:
Spring 架構在不同的底層交易管理 APIs 的頂部提供了一個抽象層。Spring 的事務支援旨在通過添加事務能力到 POJOs 來提供給 EJB 事務一個選擇方案。Spring 支援編程式和聲明式交易管理。EJBs 需要一個應用程式伺服器,但 Spring 交易管理可以在不需要應用程式伺服器的情況下實現。
局部事物 vs. 全域事務
局部事務是特定於一個單一的事務資源,如一個 JDBC 串連,而全域事務可以跨多個事務資源事務,如在一個分布式系統中的事務。
局部交易管理在一個集中的計算環境中是有用的,該計算環境中應用程式組件和資源位於一個單位點,而交易管理只涉及到一個運行在一個單一機器中的本機資料管理器。局部事務更容易實現。
全域交易管理需要在分散式運算環境中,所有的資源都分布在多個系統中。在這種情況下交易管理需要同時在局部和全域範圍內進行。分布式或全域事務跨多個系統執行,它的執行需要全域交易管理系統和所有相關係統的局部資料管理人員之間的協調。
編程式 vs. 聲明式
Spring 支援兩種類型的交易管理:
聲明式交易管理比編程式交易管理更可取,儘管它不如編程式交易管理靈活,但它允許你通過代碼控制事務。但作為一種橫切關注點,聲明式交易管理可以使用 AOP 方法進行模組化。Spring 支援使用 Spring AOP 架構的聲明式交易管理。
Spring 事務抽象
Spring 事務抽象的關鍵是由 org.springframework.transaction.PlatformTransactionManager 介面定義,如下所示:
public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition definition); throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus status) throws TransactionException;}
TransactionDefinition 是在 Spring 中事務支援的核心介面,它的定義如下:
public interface TransactionDefinition { int getPropagationBehavior(); int getIsolationLevel(); String getName(); int getTimeout(); boolean isReadOnly();}
隔離等級可能值:
傳播類型的可能值:
TransactionStatus 介面為事務代碼提供了一個簡單的方法來控制事務的執行和查詢事務狀態。
public interface TransactionStatus extends SavepointManager { boolean isNewTransaction(); boolean hasSavepoint(); void setRollbackOnly(); boolean isRollbackOnly(); boolean isCompleted();}
事務為什麼這麼中重要?正如事務的四個特性那樣,原子性,一致性,隔離性,持久性,確保資料穩定、安全、真實。銀行取錢的例子足以說明。
誰都不希望,因為系統方面的事務沒有做好,特別是金融方面的軟體,如果事務沒有做好,損失將會是非常大的。對於企業而言,因為事務原因,使用者莫名其妙賬戶上多了幾個0,對於使用者當然是非常高興的一件事,但是對於企業則是毀滅性打擊。
Spring(十四)之事務