欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Spring事務回滾的兩種方法

 更新時間:2023年07月25日 09:48:56   作者:阿桿  
Spring事務回滾的前提是你當前使用的數(shù)據(jù)庫必須支持事務,比如MySQL的Innodb是支持的,但Mysaim則是不支持事務的,本文就給大家介紹兩種Spring事務回滾的方法,需要的朋友可以參考下

方法一

  • 使用 @Transaction 來配置自動回滾,可以配置在類上,也可以配置在方法上(作用域不同),但對final或private修飾的方法無效,且該類必須是受spring所管控的,也就是被已經(jīng)被注入的類,而不是new出來的類。

    • 若配置在方法上,則該方法被加上了事務
    • 若配置在類上,則等于給該類的所有方法都加上了該注解。此時如果在該類下的某個方法也加了 @Transaction ,則該方法使用自己的配置,其他方法使用類上的配置。
@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Override
    public void save(User user) {
        //some code
        //db operation
    }
}
  • 若被配置的方法或類拋出了異常,則事務會被自動回滾,除非你在該方法中手動捕獲了異常,且沒有拋出新的異常。
  • 可以使用 @Transactional(rollbackFor = Exception.class) 來設定針對特定的異常進行事務回滾,如果不設置則默認會回滾 RuntimeException and Error (參考自源碼內(nèi)文檔)。
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
    @Resource
	private UserMapper userMapper;
    @Override
    public void save(User user) {
        userMapper.insert(user);
        throw new RuntimeException(); // 拋出異常,事務回滾,上面的insert插入失敗。
    }
}

方法二

通過注入 DataSourceTransactionManager 來手動開啟事務,手動回滾事務,用于拋出異常被catch后,進行手動回滾,可控程度更高,可以更靈活的使用。

  • 先注入 DataSourceTransactionManager 事務管理對象
  • new 一個 DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 對象
  • 使用 TransactionStatus status = transactionManager.getTransaction(def);來開啟一個事務,
  • 使用 transactionManager.rollback(status); 來回滾這個事務
  • 使用 transactionManager.commit(status); 來提交這個事務
@Service
public class UserServiceImpl implements UserService {
   @Autowired
   private DataSourceTransactionManager transactionManager;
   @Override
   @Transactional
   public void save(User user) {
       DefaultTransactionDefinition def = new DefaultTransactionDefinition();
       // explicitly setting the transaction name is something that can only be done programmatically
       def.setName("SomeTxName");
       def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
       TransactionStatus status = transactionManager.getTransaction(def);
       try {
           // execute your business logic here
           //db operation
       } catch (Exception ex) {
           transactionManager.rollback(status);
           throw ex;
       }
   }
} // 此代碼案例來自Alibaba Coding Guidelines

到此這篇關(guān)于詳解Spring事務回滾的兩種方法的文章就介紹到這了,更多相關(guān)Spring事務回滾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java19新特性中外部函數(shù)與內(nèi)存API

    Java19新特性中外部函數(shù)與內(nèi)存API

    Java19引入的外部函數(shù)與內(nèi)存API(預覽功能)是Project Panama一部分,旨在簡化Java與本地代碼及非堆內(nèi)存的交互,提供更低層次的編程能力,解決了傳統(tǒng)JNI調(diào)用的復雜性、安全性和性能局限,特別適合高性能計算和系統(tǒng)編程領(lǐng)域,感興趣的可以了解一下
    2024-09-09
  • springboot整合mqtt客戶端示例分享

    springboot整合mqtt客戶端示例分享

    這篇文章主要介紹了springboot整合mqtt客戶端示例分享的相關(guān)資料,需要的朋友可以參考下
    2023-07-07
  • Java診斷工具Arthas安裝與卸載的詳細指南

    Java診斷工具Arthas安裝與卸載的詳細指南

    Arthas?是阿里巴巴開源的一款強大的?Java?診斷工具,能夠幫助開發(fā)者在不重啟應用的情況下,實時監(jiān)控和診斷?Java?應用的運行狀態(tài),本文將詳細介紹?Arthas?的多種安裝方式、使用方法以及卸載步驟,幫助開發(fā)者快速上手并應用于實際開發(fā)中,需要的朋友可以參考下
    2025-02-02
  • java內(nèi)存管理關(guān)系及內(nèi)存泄露的原理分析

    java內(nèi)存管理關(guān)系及內(nèi)存泄露的原理分析

    這篇文章主要介紹了java內(nèi)存管理關(guān)系及內(nèi)存泄露的原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 在SpringBoot中使用MongoDB的簡單場景案例

    在SpringBoot中使用MongoDB的簡單場景案例

    MongoDB 是一種非關(guān)系型數(shù)據(jù)庫,也被稱為 NoSQL 數(shù)據(jù)庫,它主要以文檔的形式存儲數(shù)據(jù),本文給大家介紹了在SpringBoot中使用MongoDB的簡單場景案例,并通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-09-09
  • SpringBoot全局異常處理之解決404/500錯誤

    SpringBoot全局異常處理之解決404/500錯誤

    在搭建項目框架的時候用的是springboot,想統(tǒng)一處理異常,但是發(fā)現(xiàn)404的錯誤總是捕捉不到,總是返回的是springBoot自帶的錯誤結(jié)果信息,這篇文章主要給大家介紹了關(guān)于SpringBoot全局異常處理之解決404/500錯誤的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • JPA實現(xiàn)多條件分頁查詢

    JPA實現(xiàn)多條件分頁查詢

    這篇文章主要介紹了JPA實現(xiàn)多條件分頁查詢方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 詳解在SpringBoot中使用MongoDb做單元測試的代碼

    詳解在SpringBoot中使用MongoDb做單元測試的代碼

    這篇文章主要介紹了詳解在SpringBoot中使用MongoDb做單元測試的代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Java滾動數(shù)組計算編輯距離操作示例

    Java滾動數(shù)組計算編輯距離操作示例

    這篇文章主要介紹了Java滾動數(shù)組計算編輯距離操作,涉及java字符串與數(shù)組的遍歷、計算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • ChatGpt都使用的Java BPE分詞算法不要了解一下

    ChatGpt都使用的Java BPE分詞算法不要了解一下

    Byte Pair Encoding(BPE)是一種文本壓縮算法,它通常用于自然語言處理領(lǐng)域中的分詞、詞匯表構(gòu)建等任務,本文將對 BPE 算法進行全面、詳細的講解,并提供 Java 相關(guān)的代碼示例,希望對大家有所幫助
    2023-06-06

最新評論