SpringBoot事務(wù)提交后執(zhí)行后續(xù)操作

SpringBoot事務(wù)提交后執(zhí)行后續(xù)操作

業(yè)務(wù)場景

業(yè)務(wù)需求上經(jīng)常會有一些邊緣操作,比如主流程操作A:用戶報名課程操作入庫,邊緣操作B:發(fā)送郵件或短信通知。

業(yè)務(wù)要求

  • 操作A操作數(shù)據(jù)庫失敗后,事務(wù)回滾,那么操作B不能執(zhí)行。
  • 操作A執(zhí)行成功后,操作B也必須執(zhí)行成功

如何實現(xiàn)

  • 普通的執(zhí)行A,之后執(zhí)行B,是可以滿足要求1,對于要求2通常需要設(shè)計補償?shù)牟僮?/li>
  • 一般邊緣的操作,通常會設(shè)置成為異步的,以提升性能,比如發(fā)送MQ,業(yè)務(wù)系統(tǒng)負責(zé)事務(wù)成功后消息發(fā)送成功,然后接收系統(tǒng)負責(zé)保證通知成功完成

實現(xiàn)方案

使用TransactionSynchronizationManager在事務(wù)提交之后操作

@Component
public class CallBackService {

    public void execute(final CallBackAction action) {

        if (TransactionSynchronizationManager.isActualTransactionActive()) {
            TransactionSynchronizationManager
                    .registerSynchronization(new TransactionSynchronizationAdapter() {
                        @Override
                        public void afterCommit() {
                            // 事務(wù)提交后執(zhí)行回調(diào)
                            action.callback();
                        }
                    });
        } else {
            // 事務(wù)提交后執(zhí)行回調(diào)
            action.callback();
        }

    }

}
public interface CallBackAction {
    /**
     * 普通事務(wù)回調(diào)
     */
    void callback();
}
  • 有了上述兩個類,就可以實現(xiàn)在一個事務(wù)提交后將消息發(fā)送到隊列或是其他操作,具體操作如下

  • 假設(shè)在一個業(yè)務(wù)下,往數(shù)據(jù)庫插入了一條記錄,然后向隊列發(fā)送一條消息

@Override
@Transactional()
public void save() {
    User user1 = new User();
    User user2 = new User();
    userMapper.insert(user1);
    userMapper.insert(user2);
    // 在事務(wù)提交后執(zhí)行
    callBackService.execute(() -> {
        // ...
    });
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運行工作負責(zé)人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,554評論 0 13
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 16,208評論 2 11
  • 概念:微服務(wù)就是一些可獨立運行、可協(xié)同工作的小的服務(wù)。微服務(wù)是現(xiàn)在特別流行的服務(wù),微服務(wù)的字面意思是大家都很好理解...
    程序員技術(shù)圈閱讀 3,454評論 2 47
  • 數(shù)據(jù)庫分布式事務(wù) 分布式事務(wù) 分布式事務(wù)就是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同...
    離兮丶斜陽閱讀 726評論 0 2
  • 1 背景 一致性是一個抽象的、具有多重含義的計算機術(shù)語,在不同應(yīng)用場景下,有不同的定義和含義。在傳統(tǒng)的IT時代,一...
    新強吖閱讀 511評論 0 2

友情鏈接更多精彩內(nèi)容