面試突擊82:SpringBoot 中如何操作事務?

2022-09-13 06:19:56

在 Spring Boot 中操作事務有兩種方式:程式設計式事務或宣告式事務,接下來我們一起來看二者的具體實現。

1.程式設計式事務

在 Spring Boot 中實現程式設計式事務又有兩種實現方法:

  1. 使用 TransactionTemplate 物件實現程式設計式事務;
  2. 使用更加底層的 TransactionManager 物件實現程式設計式事務。

它們的具體實現程式碼如下。

1.1 TransactionTemplate 使用

要使用 TransactionTemplate 物件需要先將 TransactionTemplate 注入到當前類中 ,然後再使用它提供的 execute 方法執行事務並返回相應的執行結果,如果程式在執行途中出現了異常,那麼就可以使用程式碼手動回滾事務,具體實現程式碼如下:

1.2 TransactionManager 使用

TransactionManager 實現程式設計式事務相對麻煩一點,它需要使用兩個物件:TransactionManager 的子類,加上 TransactionDefinition 事務定義物件,再通過呼叫 TransactionManager 的 getTransaction 獲取並開啟事務,然後呼叫 TransactionManager 提供的 commit 方法提交事務,或使用它的另一個方法 rollback 回滾事務,它的具體實現程式碼如下:

從上述程式碼可以看出,使用程式設計式事務更加靈活,但寫法比較麻煩

2.宣告式事務

宣告式事務的實現比較簡單,只需要在方法上或類上新增 @Transactional 註解即可,當加入了 @Transactional 註解就可以實現在方法執行前,自動開啟事務;在方法成功執行完,自動提交事務;如果方法在執行期間,出現了異常,那麼它會自動回滾事務。
它的具體使用如下:

當然,@Transactional 支援很多引數的設定,它的引數設定列表如下:

引數的設定方法如下:

總結

本文我們介紹了兩種事務的實現方式:程式設計式事務或宣告式事務。其中程式設計式事務又分為兩種實現:使用 TransactionTemplate 物件或更加底層的 TransactionManager 物件分別實現程式設計式事務,它們的優點是靈活性更高,可以在任何程式碼片段上新增事務;而宣告式事務的實現更加簡單,只需要在類或方法上新增 @Transactional 註解即可實現事務的自動開啟和提交(以及回滾)。

是非審之於己,譭譽聽之於人,得失安之於數。

公眾號:Java面試真題解析

面試合集:https://gitee.com/mydb/interview