spring的事務註解@Transactional

spring 事務註解
默認遇到throw new RuntimeException(“…”);會回滾
需要捕獲的throw new Exception(“…”);不會回滾

// 指定回滾
@Transactional(rollbackFor=Exception.class)
public void methodName() {
// 不會回滾
throw new Exception(“…”);
}
//指定不回滾
@Transactional(noRollbackFor=Exception.class)
public ItimDaoImpl getItemDaoImpl() {
// 會回滾
throw new RuntimeException(“註釋”);
}

// 如果有事務,那麼加入事務,沒有的話新建一個(不寫的情況下)
@Transactional(propagation=Propagation.REQUIRED) 
// 容器不爲這個方法開啓事務
@Transactional(propagation=Propagation.NOT_SUPPORTED)
// 不管是否存在事務,都創建一個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務
@Transactional(propagation=Propagation.REQUIRES_NEW) 
// 必須在一個已有的事務中執行,否則拋出異常
@Transactional(propagation=Propagation.MANDATORY)
// 必須在一個沒有的事務中執行,否則拋出異常(與Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.NEVER) 
// 如果其他bean調用這個方法,在其他bean中聲明事務,那就用事務.如果其他bean沒有聲明事務,那就不用事務.
@Transactional(propagation=Propagation.SUPPORTS) 

/*
public void methodName(){
   // 本類的修改方法 1
   update();
   // 調用其他類的修改方法
   otherBean.update();
   // 本類的修改方法 2
   update();
}
other失敗了不會影響 本類的修改提交成功
本類update的失敗,other也失敗
*/

@Transactional(propagation=Propagation.NESTED)
// readOnly=true只讀,不能更新,刪除
@Transactional (propagation = Propagation.REQUIRED,readOnly=true)
// 設置超時時間
@Transactional (propagation = Propagation.REQUIRED,timeout=30)
// 設置數據庫隔離級別
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)

原文轉載自:spring之註解事務

發佈了95 篇原創文章 · 獲贊 28 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章