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