本節只提供部分**,其餘的**請去上一節檢視:
認識事務並配置乙個jdbc事務管理
這次轉賬兩次,第一次轉賬100元,第二次50元。定義乙個batchtransfer方法,將兩次轉賬放在一起進行批量轉賬.
初始資料:
預設傳播屬性@transactional相當於@transactional(propagation=propagation.required)
//轉賬
@transactional
public
void
transfer(int money)
@autowired
private transferdao transferdao;
@transactional
public
void
batchtransfer()
transferservice transferservice = (transferservice) ctx.getbean("transferservice");
//執行轉賬
從截圖看很容易發現,確實轉賬了兩次,第一次轉賬成功,第二次發生了餘額不足的異常,但是檢視資料庫,發現賬戶餘額不變,這就是事務的預設傳播屬性:@transactional(propagation=propagation.required)事務預設傳播屬性,兩次流程放在了乙個事務中管理,當所有流程結束再進行統一提交,出現問題也是一起整體回滾。
//轉賬
@transactional(propagation=propagation.requires_new)
public
void
transfer(int money)
其他的**不變.
賬戶餘額發生了變動,第一次轉賬成功了。 這就是requires_new,將兩次交易放在兩個分開的事務中,各自完成各自的工作。這個常用於只進行查詢的方法transfer方法是業務處理方法,本應該定義在sevice中的,但是為了驗證requires_new,這裡將之定義在了dao層。批量轉賬和轉賬兩個方法必須在不同的類中requires_new才有效。
事務基礎知識
幻讀和不可重複讀都是讀取了另一條已經提交的事務 這點就髒讀不同 所不同的是不可重複讀查詢的都是同乙個資料項,而幻讀針對的是一批資料整體 比如資料的個數 鎖在mysql資料庫中預設的隔離級別為repeatable read 可重複讀 serializable 序列化 可避免髒讀 不可重複讀 幻讀的發生...
spring基礎知識
通知 advice 通知定義了要織入目標物件的邏輯,以及執行時機。spring 中對應了 5 種不同型別的通知 前置通知 before 在目標方法執行前,執行通知 後置通知 after 在目標方法執行後,執行通知,此時不關係目標方法返回的結果是什麼 返回通知 after returning 在目標方...
spring基礎知識詳解
spring注入方式 xml配置注入 xml注入分為 構造方法注入 和setter方法注入 配置如下 使用p命名空間注入 詳情可參考spring spel表示式 簡化setter方法注入 setter方法注入 p命令空間 普通值 p 屬性名 值 引用值 p 屬性名 ref 引用名稱 前提 必須新增p...