Spring框架學習筆記(九) Spring中的事務管理(基於註解配置)

(一) 事務簡介

     1.  事務管理是企業級應用程序開發中必不可少的技術,  用來確保數據的完整性和一致性。

    (通俗的講,就是一手交錢一手交貨。保證數據在開發過程中全部運行正確,主要應用於關聯數據)

     2. 事務的四個關鍵屬性(ACID)

  •  原子性(atomicity): 事務是一個原子操作, 由一系列動作組成。事務的原子性確保動作要麼全部完成要麼完全不起作用。
  • 一致性(consistency): 一旦所有事務動作完成, 事務就被提交。 數據和資源就處於一種滿足業務規則的一致性狀態中。 
  • 隔離性(isolation): 可能有許多事務會同時處理相同的數據, 因此每個事物都應該與其他事務隔離開來, 防止數據損壞。 
  • 持久性(durability): 一旦事務完成, 無論發生什麼系統錯誤, 它的結果都不應該受到影響. 通常情況下, 事務的結果被寫到持久化存儲器中。

(二) Spring 中的事務管理

      1.  Spring 在不同的事務管理 API 之上定義了一個抽象層。

      2.編程式事務管理: 將事務管理代碼嵌入到業務方法中來控制事務的提交和回滾。

      3.聲明式事務管理: 大多數情況下比編程式事務管理更好用. 它將事務管理代碼從業務方法中分離出來, 以聲明的方式來實現事務管理. 事務管理作爲一種橫切關注點, 可以通過 AOP 方法模塊化. Spring 通過 Spring AOP 框架支持聲明式事務管理。

(三) Spring 中事務的實現

      1. 在Xml文件中先配置事務管理器,再打開事務管理器,具體操作

 <!-- 配置事務管理器 -->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource"></property>
     </bean>
      <!-- 啓用事務 -->
       <tx:annotation-driven transaction-manager="transactionManager"/>
     

       2. 在類中實現事務的方法前面加上  

        @Transactional  註解

@Transactional
	@Override
	public void purchase(String username, String isbn) {
		// TODO 自動生成的方法存根
		
		//1. 獲取書的單價
		double price = book.selctbookprice(isbn);
				
		//2. 更新數的庫存
		book.selctstock(isbn);
				
		//3. 更新用戶餘額
		book.selctbanlance(username, price);
		
	}

     (四) 事務管理中的其他屬性

        1.事務傳播屬性

@Transactional(propagation=Propagation.REQUIRES_NEW)
	@Override
	public void purchase(String username, String isbn) {
		// TODO 自動生成的方法存根
		
		//1. 獲取書的單價
		double price = book.selctbookprice(isbn);
				
		//2. 更新數的庫存
		book.selctstock(isbn);
				
		//3. 更新用戶餘額
		book.selctbanlance(username, price);
		
	}

        (當事務方法被另一個事務方法調用時, 必須指定事務應該如何傳播. 例如: 方法可能繼續在現有事務中運行, 也可能開啓一個新事務, 並在自己的事務中運行)常用的爲下圖1  2 中的屬性    1 爲默認屬性

         

          (1) REQUIRED 傳播行爲

        

        (2) REQUIRES_NEW 傳播行爲 

      

2. 隔離事務屬性 

@Transactional 的 isolation 屬性中設置隔離級別。

3.回滾事務屬性

@Transactional 註解的 rollbackFor 和 noRollbackFor 屬性來定義。

4.超時事務屬性

@Transactional 註解的 timeout 屬性定義

5. 只讀事務屬性

@Transactional 註解的 readonly 屬性定義

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章