spring 事務(wù)注解
默認(rèn)遇到throw new RuntimeException("...");會(huì)回滾
需要捕獲的throw new Exception("...");不會(huì)回滾
// 指定回滾
@Transactional(rollbackFor=Exception.class)
public void methodName() {
// 不會(huì)回滾
throw new Exception("...");
}
//指定不回滾
@Transactional(noRollbackFor=Exception.class)
public ItimDaoImpl getItemDaoImpl() {
// 會(huì)回滾
throw new RuntimeException("注釋");
}
// 如果有事務(wù),那么加入事務(wù),沒(méi)有的話新建一個(gè)(不寫(xiě)的情況下)
@Transactional(propagation=Propagation.REQUIRED)
// 容器不為這個(gè)方法開(kāi)啟事務(wù)
@Transactional(propagation=Propagation.NOT_SUPPORTED)
// 不管是否存在事務(wù),都創(chuàng)建一個(gè)新的事務(wù),原來(lái)的掛起,新的執(zhí)行完畢,繼續(xù)執(zhí)行老的事務(wù)
@Transactional(propagation=Propagation.REQUIRES_NEW)
// 必須在一個(gè)已有的事務(wù)中執(zhí)行,否則拋出異常
@Transactional(propagation=Propagation.MANDATORY)
// 必須在一個(gè)沒(méi)有的事務(wù)中執(zhí)行,否則拋出異常(與Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.NEVER)
// 如果其他bean調(diào)用這個(gè)方法,在其他bean中聲明事務(wù),那就用事務(wù).如果其他bean沒(méi)有聲明事務(wù),那就不用事務(wù).
@Transactional(propagation=Propagation.SUPPORTS)
/*
public void methodName(){
// 本類的修改方法 1
update();
// 調(diào)用其他類的修改方法
otherBean.update();
// 本類的修改方法 2
update();
}
other失敗了不會(huì)影響 本類的修改提交成功
本類update的失敗,other也失敗
*/
@Transactional(propagation=Propagation.NESTED)
// readOnly=true只讀,不能更新,刪除
@Transactional (propagation = Propagation.REQUIRED,readOnly=true)
// 設(shè)置超時(shí)時(shí)間
@Transactional (propagation = Propagation.REQUIRED,timeout=30)
// 設(shè)置數(shù)據(jù)庫(kù)隔離級(jí)別
@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)