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

通過(guò)Spring層面進(jìn)行事務(wù)回滾的實(shí)現(xiàn)

 更新時(shí)間:2025年04月14日 10:14:36   作者:我只有一歲半  
本文主要介紹了通過(guò)Spring層面進(jìn)行事務(wù)回滾的實(shí)現(xiàn),包括聲明式事務(wù)和編程式事務(wù),具有一定的參考價(jià)值,感興趣的可以了解一下

Spring 中事務(wù)可以分為聲明式事務(wù)和編程式事務(wù),那么解下來(lái)就從這兩方面說(shuō)一說(shuō)在 Spring 層面?zhèn)€怎么進(jìn)行回滾

聲明式事務(wù)回滾:

1. 基礎(chǔ)注解配置

通過(guò)@Transactional注解實(shí)現(xiàn)自動(dòng)回滾,默認(rèn)對(duì)RuntimeException和Error生效

@Transactional
public void transferMoney(Account from, Account to, double amount) {
    from.withdraw(amount);  // 扣款
    to.deposit(amount);     // 存款
    // 若在此處拋出RuntimeException,事務(wù)自動(dòng)回滾
}

2. 指定回滾異常類型

可以通過(guò) @Transactional 注解的 rollbackFor 參數(shù)擴(kuò)展回滾范圍到受檢異常

@Transactional(rollbackFor = {SQLException.class, BusinessException.class})
public void processOrder(Order order) throws CustomException {
    // 拋出SQLException或BusinessException時(shí)回滾
}

需要顯示聲明受檢查異常類型,否則不會(huì)滾

3. ?不回滾特殊場(chǎng)景

使用 noRollbackFor 參數(shù)排除特定異常

@Transactional(noRollbackFor = {ValidationException.class})
public void validateData(Data data) {
    // ValidationException不會(huì)觸發(fā)回滾
}

編程式事務(wù)回滾:

1. ?使用 TransactionTemplate 實(shí)現(xiàn)編程式事務(wù)

@Autowired
private TransactionTemplate transactionTemplate;

public void batchProcess() {
    transactionTemplate.execute(status -> {
        try {
            // 業(yè)務(wù)操作...
            if (errorCondition) status.setRollbackOnly();
            return result;
        } catch (Exception e) {
            status.setRollbackOnly();
            throw e;
        }
    });
}

2. 使用 ?PlatformTransactionManager 實(shí)現(xiàn)編程式事務(wù)

直接操作事務(wù)管理器實(shí)現(xiàn)完全控制

@Autowired
private PlatformTransactionManager transactionManager;

public void complexOperation() {
    TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
    try {
        // 業(yè)務(wù)操作...
        transactionManager.commit(status);
    } catch (Exception e) {
        transactionManager.rollback(status);
        throw new ServiceException("操作失敗", e);
    }
}

嵌套事務(wù)與傳播行為相關(guān)的異常回滾:

1. 嵌套事務(wù)(PROPAGATION_NESTED)

子事務(wù)作為父事務(wù)的保存點(diǎn),可部分回滾

@Transactional(propagation = Propagation.REQUIRED)
public void parentMethod() {
    // 主業(yè)務(wù)邏輯
    childMethod();  // 嵌套子事務(wù)
}

@Transactional(propagation = Propagation.NESTED)
public void childMethod() {
    // 子事務(wù)操作,失敗僅回滾子操作
}

2.傳播行為控制

通過(guò)傳播策略控制事務(wù)邊界:
REQUIRES_NEW:始終新建事務(wù)
MANDATORY:必須存在父事務(wù)
NOT_SUPPORTED:非事務(wù)執(zhí)行

通過(guò) xml 的方式配置全局回滾規(guī)則:

<tx:advice id="txAdvice">
    <tx:attributes>
        <tx:method name="save*" rollback-for="java.lang.Exception"/>
        <tx:method name="update*" no-rollback-for="BusinessWarning"/>
    </tx:attributes>
</tx:advice>

到此這篇關(guān)于通過(guò)Spring層面進(jìn)行事務(wù)回滾的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Spring事務(wù)回滾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 一文解讀java.nio.ByteBuffer

    一文解讀java.nio.ByteBuffer

    這篇文章主要介紹了java.nio.ByteBuffer的用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java純代碼實(shí)現(xiàn)導(dǎo)出PDF功能

    Java純代碼實(shí)現(xiàn)導(dǎo)出PDF功能

    在項(xiàng)目開(kāi)發(fā)中,產(chǎn)品的需求越來(lái)越奇葩啦,開(kāi)始文件下載都是下載為excel的,做著做著需求竟然變了,要求能導(dǎo)出pdf,本文就來(lái)和大家分享一下Java實(shí)現(xiàn)導(dǎo)出PDF的常用方法吧
    2023-07-07
  • java web用servlet監(jiān)聽(tīng)器實(shí)現(xiàn)顯示在線人數(shù)

    java web用servlet監(jiān)聽(tīng)器實(shí)現(xiàn)顯示在線人數(shù)

    這篇文章主要為大家詳細(xì)介紹了java web用servlet監(jiān)聽(tīng)器實(shí)現(xiàn)顯示在線人數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)(賬號(hào)密碼登錄和使用手機(jī)驗(yàn)證碼登錄)

    springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)(賬號(hào)密碼登錄和使用手機(jī)驗(yàn)證碼登錄)

    這篇文章給大家介紹springboot整合shiro多驗(yàn)證登錄功能的實(shí)現(xiàn)方法,包括賬號(hào)密碼登錄和使用手機(jī)驗(yàn)證碼登錄功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-07-07
  • 帶你粗略了解Java數(shù)組的使用

    帶你粗略了解Java數(shù)組的使用

    這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的定義和使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 一個(gè)合格JAVA軟件工程師應(yīng)該具備什么

    一個(gè)合格JAVA軟件工程師應(yīng)該具備什么

    一個(gè)合格JAVA軟件工程師應(yīng)該具備哪些專業(yè)技能,面試技巧是什么?本文為大家分享了2016版最新Java軟件工程師就業(yè)思維圖,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java的四種常見(jiàn)線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解

    Java的四種常見(jiàn)線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java的四種常見(jiàn)線程池及Scheduled定時(shí)線程池實(shí)現(xiàn)詳解,在Java中,我們可以通過(guò)Executors類來(lái)創(chuàng)建ScheduledThreadPool,Executors類提供了幾個(gè)靜態(tài)方法來(lái)創(chuàng)建不同類型的線程池,包括ScheduledThreadPool,需要的朋友可以參考下
    2023-09-09
  • idea中配置tomcat啟動(dòng)jsp項(xiàng)目過(guò)程

    idea中配置tomcat啟動(dòng)jsp項(xiàng)目過(guò)程

    在IntelliJ IDEA中配置Tomcat并啟動(dòng)JSP項(xiàng)目,首先需要在IDEA中安裝和配置Tomcat服務(wù)器,接著將項(xiàng)目與Tomcat關(guān)聯(lián),設(shè)置正確的部署路徑和端口號(hào),通過(guò)這些步驟,可以實(shí)現(xiàn)JSP項(xiàng)目的本地運(yùn)行和調(diào)試,使得開(kāi)發(fā)和測(cè)試工作更加高效
    2024-10-10
  • Java使用OpenCV進(jìn)行圖像處理的示例代碼

    Java使用OpenCV進(jìn)行圖像處理的示例代碼

    OpenCV是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)庫(kù),廣泛應(yīng)用于圖像處理、機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺(jué)等領(lǐng)域,盡管OpenCV主要使用C/C++進(jìn)行開(kāi)發(fā),但它也為Java提供了綁定,使得Java開(kāi)發(fā)者能夠利用其強(qiáng)大的圖像處理功能,在本篇文章中,我們將詳細(xì)介紹如何在Java中使用OpenCV,需要的朋友可以參考下
    2025-03-03
  • struts1實(shí)現(xiàn)簡(jiǎn)單的登錄功能實(shí)例(附源碼)

    struts1實(shí)現(xiàn)簡(jiǎn)單的登錄功能實(shí)例(附源碼)

    本篇文章主要介紹了struts1實(shí)現(xiàn)簡(jiǎn)單的登錄功能實(shí)例(附源碼),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04

最新評(píng)論

普定县| 崇信县| 彭阳县| 金寨县| 大同市| 肥西县| 兴海县| 玉环县| 青州市| 巨野县| 乐业县| 涟源市| 新龙县| 驻马店市| 镶黄旗| 阜城县| 体育| 托克逊县| 久治县| 舟山市| 合水县| 巴青县| 桃源县| 荥经县| 仁布县| 西乡县| 桃园县| 万源市| 黄浦区| 惠安县| 皋兰县| 平和县| 西乌珠穆沁旗| 东台市| 林周县| 伊川县| 岢岚县| 太仓市| 萝北县| 徐闻县| 永寿县|