一、事務分析
1.1 情形一
/**
* 第一種情況: 外層方法,內層方法都沒事務,外層方法丟擲異常;
* 結果: 外層方法插入成功,報錯以後,內層方法不執行,未插入成功;
1.2 情形二
/**
* 第二種情況: 外層方法,加事務,內層方法未加事務註解,外層方法丟擲異常;
* 結果: 外層方法回滾,報錯以後,內層方法不執行,內外層都未插入成功;
1.3 情形三
/**
* 第三種情況: 外層方法,內層方法都未加transaction,內層方法拋異常;
* 結果: outer和inner都插入成功;
*/public void outertransaction()
public void innertransaction()
1.4 情形四
/**
* 第四種情況: 外層方法加transaction,內層方法未加註解,內層方法拋異常;
* 結果: outer和inner都未插入成功,事務回滾;
*/@transactional
public void outertransaction()
public void innertransaction()
1.5 情形五
/**
* 第五種情況: 外層方法加transaction,內層方法未加註解,內層方法拋異常, 外層方法對內層方法try catch;
* 結果: 事務失效,outer和inner都插入成功;
1.6 情形六
/**
* 第六種情況: 外層方法加transaction,內層方法未加註解,內層方法拋異常, 外層方法對內層方法try catch,但是把異常拋了出來;
* 結果: 事務回滾,outer和inner都未插入成功;
*/@transactional
public void outertransaction() catch (exception e)
}public void innertransaction()
1.7 情形七
/**
* 第七種情況: 外層方法加transaction,內層方法未加註解,內層方法拋異常, 外層方法對內層方法try catch, 但是手動開啟rollback;
* 結果: 事務回滾,outer和inner都未插入成功;
*/@transactional
public void outertransaction() catch (exception e)
}public void innertransaction()
1.8 情形八
/**
* 第八種情況: 外層方法加transaction,內層方法未加註解,內層方法拋異常, 外層方法對內層方法try catch,並對內層方法自己注入自己;
* 結果: 事務未回滾,outer和inner插入成功,inner1報錯之後,未插入成功;
1.9 情形九
/**
* 第九種情況: 內外層方法加transaction,內層方法拋異常, 外層方法對內層方法try catch,並對內層方法自己注入自己;
* 結果: 事務回滾,inner,inner1,outer都未插入成功;
*/@transactional
public void outertransaction() catch (exception e)
}@transactional
public void innertransaction()
1.10 情形十
/**
* 第十種情況: 內外層方法加transaction,外層方法對內層方法try catch,並對內層方法自己注入自己,try裡丟擲異常;
* 結果: 事務未回滾,異常被catch事務失效;
1.11 情形十一
/**
* 第十一種情況: 內外層方法加transaction,內層也拋異常,外層方法對內層方法try catch,並對內層方法自己注入自己,try裡丟擲異常;
* 結果: 事務回滾,被重新標記為rollback;
1.12 情形十二
/**
* 第十二種情況: 外層方法加transaction,內層方法加requere_new, 內層也拋異常,外層方法對內層方法try catch,並對內層方法自己注入自己,try裡丟擲異常;
* 結果: 內層事務回滾,外層事務失效;
原始碼
Spring 事務傳播實踐分析
事務管理是應用系統開發中必不可少的一部分。事物將若干的資料庫操作作為乙個整體控制,一起成功或一起失敗。事物有以下特性 原子性 指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。一致性 指事務前後資料的完整性必須保持一致。隔離性 指多個使用者併發訪問資料庫時,乙個使用者的事務不能被...
Spring原始碼分析 事務管理
mybatis是沒有事務管理的,需要將事務交給spring管理。在service層function上加 transactional,表明有關資料庫的dml語句,操作所需要的事務都交由spring管理。實際上是 connect.commit connect.rallback transaction實際...
Spring 事務 事務控制
0 註解 autowire 自動注入 url url b 1 spring專案中事務手動回滾 b transactionaspectsupport.currenttransactionstatus setrollbackonly 或者丟擲異常 transactional rollbackfor pu...