首页 > 其他分享 >springboot 事务Transactional使用小技巧

springboot 事务Transactional使用小技巧

时间:2022-11-16 14:45:27浏览次数:46  
标签:TransactionSynchronizationManager runnable DoTransactionCompletion springboot Tr

springboot 事务Transactional使用小技巧

使用场景:
我们在处理业务时会有这样的需求:我们需要在业务中需要调用远程的RPC接口,或者调用MQ发送消息,如果一切正常那自然皆大欢喜;但是,业务中出现了异常,导致了事务回滚,但是调用远程的RPC接口,或者调用MQ的动作是无法取消的,这可能就会出现严重的问题。
解决:在事务提交后调用接口

import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;

/**
 * @author wjj
 */
public class TransactionUtils {

    public static void doAfterTransaction(DoTransactionCompletion doTransactionCompletion) {
        if (TransactionSynchronizationManager.isActualTransactionActive()){
            TransactionSynchronizationManager.registerSynchronization(doTransactionCompletion);
        }
    }

    @Transactional
    public void aa(){
        TransactionUtils.doAfterTransaction(new DoTransactionCompletion(()->{
            //send MQ ... RPC
        }));
    }
}



class DoTransactionCompletion implements TransactionSynchronization {
    private Runnable runnable;
    public DoTransactionCompletion(Runnable runnable) {
        this.runnable = runnable;
    }


    @Override
    public void afterCompletion(int status) {
        if (status ==TransactionSynchronization.STATUS_COMMITTED){
            this.runnable.run();
        }
    }
}

标签:TransactionSynchronizationManager,runnable,DoTransactionCompletion,springboot,Tr
From: https://www.cnblogs.com/WangJingjun/p/16895847.html

相关文章

  • 关于SpringBoot项目中Jar包使用外部配置文件的问题
     SpringBoot项目的jar包在有外部配置文件的情况下会优先调用外部配置文件外部配置文件的优先级依次是执行命令的目录下的config目录(jar包同一目录下的config目录)jar包......
  • springboot openfeign服务端与客户端调用演示demo
    文章目录​​serverdemo演示​​​​创建server项目​​​​application.properties配置​​​​importjar[pom.xml]​​​​创建服务端的restfulcontroller​​​​验......
  • SpringBoot 2学习笔记(二)
    45、web实验-抽取公共页面官方文档-TemplateLayout公共页面/templates/common.html <!DOCTYPEhtml> <htmllang="en"xmlns:th="http://www.thymeleaf.org">......
  • SpringBoot 2学习笔记(一)
    01、基础入门-SpringBoot2课程介绍SpringBoot2核心技术SpringBoot2响应式编程学习要求-熟悉Spring基础-熟悉Maven使用环境要求Java8及以上Maven......
  • Java SpringBoot FTP 上传下载文件
    POM添加依赖<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.7</version></dependency><!--......
  • 深度学习调参技巧合集
    本文参考自公众号【夕小瑶的卖萌屋】的文章一、寻找合适的学习率学习率是一个非常非常重要的超参数,这个参数呢,面对不同规模、不同batch-size、不同优化方式、不同数据集,其......
  • Springboot整合Jwt实现用户认证
    前言相信大家在进行用户认证中或多或少都要对用户进行认证,当前进行认证的方式有基于session、token等主流方式,但是目前使用最广泛的还是基于JWT的用户认证,特别适用于......
  • 我把SpringBoot的banner换成了美女;老板:工作不饱和,建议加班
    很多公司的banner是自己公司的名称或者产品名称,banner也是可以自由定制的。但没想到还有这种骚操作,场主日常惊呆,我们一起康康。。一:banner.txt在SpringBoot项目的resour......
  • springboot 启动报错 Bean with name ‘xxxxService‘ has been injected into other
    问题springboot启动报错Beanwithname‘xxxxService‘hasbeeninjectedintootherbeans 原因依赖循环,即我现在有一个ServiceA需要调用ServiceB的方法,......
  • 这可能是你需要的React实战技巧
    一、父组件通过Ref调用子组件中的方法这里同时演示使用函数组件和类组件的父子组件如何编写子组件React.forwardRefReact.useImperativeHandlepublic、private、pr......