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