在 Spring Boot 中操作事務有兩種方式:程式設計式事務或宣告式事務,接下來我們一起來看二者的具體實現。
在 Spring Boot 中實現程式設計式事務又有兩種實現方法:
它們的具體實現程式碼如下。
要使用 TransactionTemplate 物件需要先將 TransactionTemplate 注入到當前類中 ,然後再使用它提供的 execute 方法執行事務並返回相應的執行結果,如果程式在執行途中出現了異常,那麼就可以使用程式碼手動回滾事務,具體實現程式碼如下:
TransactionManager 實現程式設計式事務相對麻煩一點,它需要使用兩個物件:TransactionManager 的子類,加上 TransactionDefinition 事務定義物件,再通過呼叫 TransactionManager 的 getTransaction 獲取並開啟事務,然後呼叫 TransactionManager 提供的 commit 方法提交事務,或使用它的另一個方法 rollback 回滾事務,它的具體實現程式碼如下:
從上述程式碼可以看出,使用程式設計式事務更加靈活,但寫法比較麻煩。
宣告式事務的實現比較簡單,只需要在方法上或類上新增 @Transactional 註解即可,當加入了 @Transactional 註解就可以實現在方法執行前,自動開啟事務;在方法成功執行完,自動提交事務;如果方法在執行期間,出現了異常,那麼它會自動回滾事務。
它的具體使用如下:
當然,@Transactional 支援很多引數的設定,它的引數設定列表如下:
引數的設定方法如下:
本文我們介紹了兩種事務的實現方式:程式設計式事務或宣告式事務。其中程式設計式事務又分為兩種實現:使用 TransactionTemplate 物件或更加底層的 TransactionManager 物件分別實現程式設計式事務,它們的優點是靈活性更高,可以在任何程式碼片段上新增事務;而宣告式事務的實現更加簡單,只需要在類或方法上新增 @Transactional 註解即可實現事務的自動開啟和提交(以及回滾)。
是非審之於己,譭譽聽之於人,得失安之於數。
公眾號:Java面試真題解析