最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring事務(wù)回滾的兩種方法

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

方法一

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

    • 若配置在方法上,則該方法被加上了事務(wù)
    • 若配置在類上,則等于給該類的所有方法都加上了該注解。此時如果在該類下的某個方法也加了 @Transaction ,則該方法使用自己的配置,其他方法使用類上的配置。
@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Override
    public void save(User user) {
        //some code
        //db operation
    }
}
  • 若被配置的方法或類拋出了異常,則事務(wù)會被自動回滾,除非你在該方法中手動捕獲了異常,且沒有拋出新的異常。
  • 可以使用 @Transactional(rollbackFor = Exception.class) 來設(shè)定針對特定的異常進行事務(wù)回滾,如果不設(shè)置則默認會回滾 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(); // 拋出異常,事務(wù)回滾,上面的insert插入失敗。
    }
}

方法二

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

  • 先注入 DataSourceTransactionManager 事務(wù)管理對象
  • new 一個 DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 對象
  • 使用 TransactionStatus status = transactionManager.getTransaction(def);來開啟一個事務(wù),
  • 使用 transactionManager.rollback(status); 來回滾這個事務(wù)
  • 使用 transactionManager.commit(status); 來提交這個事務(wù)
@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事務(wù)回滾的兩種方法的文章就介紹到這了,更多相關(guān)Spring事務(wù)回滾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • maven工程中讀取resources中的資源文件

    maven工程中讀取resources中的資源文件

    Web項目中應(yīng)該經(jīng)常有這樣的需求,在maven項目的resources目錄下放一些文件,比如一些配置文件,資源文件等,本文主要介紹了maven工程中讀取resources中的資源文件,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • 原來Java接口多實現(xiàn)還可以這樣玩

    原來Java接口多實現(xiàn)還可以這樣玩

    JAVA中類不直接支持多繼承,因為會出現(xiàn)調(diào)用的不確定性,所以JAVA將多繼承機制進行改良,在JAVA中變成了多實現(xiàn),這篇文章主要給大家介紹了關(guān)于Java接口多實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Object.wait()與Object.notify()的用法詳細解析

    Object.wait()與Object.notify()的用法詳細解析

    以下是對java中Object.wait()與Object.notify()的用法進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • SpringBoot QQ郵箱發(fā)送郵件實例代碼

    SpringBoot QQ郵箱發(fā)送郵件實例代碼

    大家好,本篇文章主要講的是SpringBoot QQ郵箱發(fā)送郵件實例代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Mybatis傳遞List集合方式

    Mybatis傳遞List集合方式

    MyBatis傳遞List參數(shù)時,若XML變量名不匹配默認的"list"鍵,會報錯,需通過@Param指定名稱、使用collection屬性或索引方式正確引用
    2025-07-07
  • 解決調(diào)試JDK源碼時,不能查看變量的值問題

    解決調(diào)試JDK源碼時,不能查看變量的值問題

    下面小編就為大家?guī)硪黄鉀Q調(diào)試JDK源碼時,不能查看變量的值問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Java并發(fā)編程之ConcurrentLinkedQueue源碼詳解

    Java并發(fā)編程之ConcurrentLinkedQueue源碼詳解

    今天帶小伙伴們學(xué)習(xí)一下Java并發(fā)編程之Java ConcurrentLinkedQueue源碼,本篇文章詳細分析了ConcurrentLinkedQueue源碼,有代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助喲,需要的朋友可以參考下
    2021-05-05
  • Spring?MVC傳遞json格式的數(shù)據(jù)兩種方法

    Spring?MVC傳遞json格式的數(shù)據(jù)兩種方法

    文章介紹了兩種使用SpringMVC傳遞JSON數(shù)據(jù)的方法,每種方法結(jié)合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • springboot中l(wèi)ogback日志配置的詳細說明

    springboot中l(wèi)ogback日志配置的詳細說明

    Logback 是一個高效、靈活的日志記錄工具,支持多種日志格式和輸出目標(biāo)(如控制臺、文件等),通過配置 logback-spring.xml 文件,可以自定義日志的輸出方式和格式,下面給大家介紹springboot中l(wèi)ogback日志配置的詳細說明,感興趣的朋友一起看看吧
    2025-05-05
  • Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別

    Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別

    這篇文章主要介紹了Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

梨树县| 梅州市| 康平县| 洪雅县| 新野县| 宁河县| 平原县| 湟中县| 龙里县| 郁南县| 翼城县| 永顺县| 嘉祥县| 磴口县| 宽甸| 和田市| 潮州市| 西和县| 红河县| 珲春市| 五大连池市| 综艺| 酒泉市| 镇安县| 肥东县| 青龙| 射阳县| 北川| 宣恩县| 阿城市| 双峰县| 阳江市| 会东县| 长宁县| 海南省| 祥云县| 南华县| 基隆市| 濮阳县| 阜阳市| 乌拉特后旗|