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

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

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

方法一

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

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

方法二

通過(guò)注入 DataSourceTransactionManager 來(lái)手動(dòng)開(kāi)啟事務(wù),手動(dòng)回滾事務(wù),用于拋出異常被catch后,進(jìn)行手動(dòng)回滾,可控程度更高,可以更靈活的使用。

  • 先注入 DataSourceTransactionManager 事務(wù)管理對(duì)象
  • new 一個(gè) DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 對(duì)象
  • 使用 TransactionStatus status = transactionManager.getTransaction(def);來(lái)開(kāi)啟一個(gè)事務(wù),
  • 使用 transactionManager.rollback(status); 來(lái)回滾這個(gè)事務(wù)
  • 使用 transactionManager.commit(status); 來(lái)提交這個(gè)事務(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;
       }
   }
} // 此代碼案例來(lái)自Alibaba Coding Guidelines

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

相關(guān)文章

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

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

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

    原來(lái)Java接口多實(shí)現(xiàn)還可以這樣玩

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

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

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

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

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

    Mybatis傳遞List集合方式

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

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

    下面小編就為大家?guī)?lái)一篇解決調(diào)試JDK源碼時(shí),不能查看變量的值問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Java并發(fā)編程之ConcurrentLinkedQueue源碼詳解

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

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

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

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

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

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

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

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

最新評(píng)論

治县。| 宜城市| 四平市| 阜平县| 叶城县| 平阴县| 鄂托克前旗| 巩义市| 阿坝| 洪湖市| 长武县| 莱芜市| 谢通门县| 山东省| 商水县| 防城港市| 富川| 永安市| 黔江区| 唐海县| 西贡区| 台州市| 北流市| 苍梧县| 桂平市| 高要市| 梅州市| 大余县| 漳平市| 闵行区| 永清县| 岗巴县| 喀什市| 会理县| 建宁县| 平山县| 华坪县| 吴川市| 和林格尔县| 廊坊市| 贺州市|