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

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

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

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

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

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

通過@Transactional注解實現(xiàn)自動回滾,默認(rèn)對RuntimeException和Error生效

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

2. 指定回滾異常類型

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

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

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

3. ?不回滾特殊場景

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

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

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

1. ?使用 TransactionTemplate 實現(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 實現(xiàn)編程式事務(wù)

直接操作事務(wù)管理器實現(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)的異?;貪L:

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.傳播行為控制

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

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

相關(guān)文章

  • Spring Boot入門(web+freemarker)

    Spring Boot入門(web+freemarker)

    這篇文章主要介紹了Spring Boot入門(web+freemarker)的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • SpringBoot+logback默認(rèn)日志的配置和使用方式

    SpringBoot+logback默認(rèn)日志的配置和使用方式

    這篇文章主要介紹了SpringBoot+logback默認(rèn)日志的配置和使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java阻塞隊列BlockingQueue詳解

    Java阻塞隊列BlockingQueue詳解

    這篇文章主要介紹了Java阻塞隊列BlockingQueue,文章通過隊列的類型展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-07-07
  • springboot?ElasticSearch如何配置自定義轉(zhuǎn)換器ElasticsearchCustomConversions

    springboot?ElasticSearch如何配置自定義轉(zhuǎn)換器ElasticsearchCustomConver

    這篇文章主要介紹了springboot?ElasticSearch如何配置自定義轉(zhuǎn)換器ElasticsearchCustomConversions問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • java使用socket實現(xiàn)一個多線程web服務(wù)器的方法

    java使用socket實現(xiàn)一個多線程web服務(wù)器的方法

    今天小編就為大家分享一篇java使用socket實現(xiàn)一個多線程web服務(wù)器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 詳解Java線程中斷知識點(diǎn)

    詳解Java線程中斷知識點(diǎn)

    在本篇文章中我們給大家分享了關(guān)于Java線程中斷的相關(guān)知識點(diǎn)內(nèi)容以及相關(guān)代碼實例,有興趣的朋友們可以學(xué)習(xí)下。
    2018-09-09
  • Java AbstractMethodError原因案例詳解

    Java AbstractMethodError原因案例詳解

    這篇文章主要介紹了Java AbstractMethodError原因案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 理解java多線程中ExecutorService使用

    理解java多線程中ExecutorService使用

    這篇文章主要幫助大家理解java多線程中ExcetorServiced的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • JavaWeb中異步交互的關(guān)鍵Ajax詳解

    JavaWeb中異步交互的關(guān)鍵Ajax詳解

    這篇文章主要給大家介紹了關(guān)于JavaWeb中異步交互關(guān)鍵Ajax的相關(guān)資料,在javaweb中,ajax是前后臺交互的技術(shù),可以實現(xiàn)異步請求,不用刷新整個頁面就可以完成操作,需要的朋友可以參考下
    2023-07-07
  • 深入理解Java動態(tài)代理與靜態(tài)代理

    深入理解Java動態(tài)代理與靜態(tài)代理

    這篇文章主要介紹了深入理解Java動態(tài)代理與靜態(tài)代理,靜態(tài)代理,代理類和被代理的類實現(xiàn)了同樣的接口,代理類同時持有被代理類的引用,動態(tài)代理的根據(jù)實現(xiàn)方式的不同可以分為JDK動態(tài)代理和CGlib動態(tài)代理
    2022-06-06

最新評論