spring 事務註解 預設遇到throw new RuntimeException("...");會回滾需要捕獲的throw new Exception("...");不會回滾// 指定回滾@Transactional(rollbackFor=Exception.class) public voi ...
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)