springboot 監(jiān)聽事務,執(zhí)行另外的任務

最近做項目碰到一個問題,就是要在某些事務提交以后然后再去執(zhí)行某些操作,有一種方法是手動開啟事務,然后手動提交,提交完畢之后再去執(zhí)行另外的方法,但是這樣太麻煩,springboot 2.0以上提供了一個便捷的方法,那就是Event事件,配合ApplicationEventPublisher、事務監(jiān)聽器,完成以上操作。
具體操作如下,
一個普通的service:

/**
 * @title: TestServiceImpl
 * @projectName test
 * @description: 測試
 * @author zhy
 * @date 2020/4/2415:35
 */
public class TestServiceImpl implements TestService {

    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    /**
     * 新增方法
     * @param obj
     * @throws
     * @return boolean
     * @author zhy
     * @date 2020/4/24 15:37
     */
    @Override
    @Transactional(rollbackFor = Exception.class)//一定要開啟事務,不然會失效
    public boolean insert(Object obj) {
        //TODO 主線程做新增邏輯

        //完成之后調(diào)用
        applicationEventPublisher.publishEvent(new ChangeObjEvent(obj));
        return false;
    }


}

ChangeObjEvent,自定義事件,這里的構(gòu)造方法參數(shù)的Object,就是一個方法參數(shù),在監(jiān)聽器里可以獲取的,不用糾結(jié)是不是一定得傳Object,實際上傳什么都行

/**
 * @title: ChangeObjEvent
 * @projectName test
 * @description: 修改信息事件
 * @author zhy
 * @date 2020/4/2415:40
 */
public class ChangeObjEvent extends ApplicationEvent {
    public ChangeObjEvent(Object source) {
        super(source);
    }
}

事件監(jiān)聽器,具體執(zhí)行額外的操作,監(jiān)聽器可以監(jiān)聽很多種事務狀態(tài),詳情可以打開注解中的TransactionPhase類去看看

/**
 * @title: ChangeObjListener
 * @projectName test
 * @description: 修改信息事務監(jiān)聽器
 * @author zhy
 * @date 2020/4/2415:41
 */
@Component
public class ChangeObjListener {

    /**
      * 在事務提交之后所需進行的額外操作,寫在這里
      * @param changeObjEvent
      * @throws
      * @return void
      * @author zhy
      * @date 2020/4/24 15:41
      */
    @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
    public void hanldeChangeCarSpaceEvent(ChangeObjEvent changeObjEvent) {
        //獲取參數(shù)
        Object source = changeObjEvent.getSource();

        //TODO 編寫邏輯
    }

}
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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