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

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

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

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

聲明式事務回滾:

1. 基礎注解配置

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

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

2. 指定回滾異常類型

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

@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ā)回滾
}

編程式事務回滾:

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

@Autowired
private TransactionTemplate transactionTemplate;

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

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

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

@Autowired
private PlatformTransactionManager transactionManager;

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

嵌套事務與傳播行為相關的異?;貪L:

1. 嵌套事務(PROPAGATION_NESTED)

子事務作為父事務的保存點,可部分回滾

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

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

2.傳播行為控制

通過傳播策略控制事務邊界:
REQUIRES_NEW:始終新建事務
MANDATORY:必須存在父事務
NOT_SUPPORTED:非事務執(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>

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

相關文章

  • Spring Boot入門(web+freemarker)

    Spring Boot入門(web+freemarker)

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

    SpringBoot+logback默認日志的配置和使用方式

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

    Java阻塞隊列BlockingQueue詳解

    這篇文章主要介紹了Java阻塞隊列BlockingQueue,文章通過隊列的類型展開詳細的內(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服務器的方法

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

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

    詳解Java線程中斷知識點

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

    Java AbstractMethodError原因案例詳解

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

    理解java多線程中ExecutorService使用

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

    JavaWeb中異步交互的關鍵Ajax詳解

    這篇文章主要給大家介紹了關于JavaWeb中異步交互關鍵Ajax的相關資料,在javaweb中,ajax是前后臺交互的技術,可以實現(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

最新評論