Spring事務分析

2021-10-18 21:48:49 字數 3886 閱讀 5389

一、事務分析

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...