首页 > 其他分享 >自定义异常回滚@Transactional注解

自定义异常回滚@Transactional注解

时间:2023-03-19 14:56:09浏览次数:38  
标签:回滚 return 自定义 Transactional resp TransactionAspectSupport currentTransactionStat

//重点关注的是@Transactional注解和TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()@Override
    @Transactional(rollbackFor = RuntimeException.class)
    public ServerResp<Object> updateDistributionRule(UpdateDistributionRuleRequest req) {
        ServerResp<Object> resp = new ServerResp<>();
        try {
            JSONArray jsonArray = JSONArray.parseArray(req.getDistributionList());
            if (null == jsonArray ){
                return resp.error("分配数组为空");
            }
            List<TfCustomerDistributeRole> list = JSON.parseArray(jsonArray.toJSONString(), TfCustomerDistributeRole.class);
            for (TfCustomerDistributeRole distributeRole : list){
                Integer distributeCount = tfCustomerDistributeRoleMapper.updateDistributeByStoreIdAndclerkId(distributeRole);
                if (distributeCount == 0){
                    throw new RuntimeException("修改店员分配规则错误,回滚");
                }
            }
            return resp.success("修改成功");
        }catch (RuntimeException e) {
            //触发强制回滚
            e.printStackTrace();
            logger.log(MyLogUtil.LOG_ERROR, "触发回滚,入参:" + req + ",错误类型" ,e);
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return resp.error("修改店员分配规则出现错误");
        }catch (Exception e){
            e.printStackTrace();
            logger.log(MyLogUtil.LOG_ERROR,"修改分配规则错误");
            return resp.error("分配规则修改错误");
        }
    }
@Override
    @Transactional()
    public boolean sendTfProductPublicity(Map params) {

   // 启用一个事务
    Object obj = TransactionAspectSupport.currentTransactionStatus().createSavepoint();

   代码···················

   // 报错后 对上面创建的事务进行回滚
   TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(obj);

    }

转自:https://www.cnblogs.com/bzd1030806032/p/16301850.html

标签:回滚,return,自定义,Transactional,resp,TransactionAspectSupport,currentTransactionStat
From: https://www.cnblogs.com/mihutao/p/17233053.html

相关文章

  • 【Android开发】用户界面设计-开发自定义的View
    效果图:Android中,所有的UI界面都是由View类和ViewGroup类及其子类组合而成的。View是所有UI组件的基类(父类),为ViewGroup类是容纳这些UI组件的容器,其本身也是View的子类。关......
  • Visual Studio自定义代码片段
    问题描述VisualStudio提供了CodeSnippetManager功能,这使得用户可以自定义代码片段。用户可以在CodeSnippetManager中创建自己的代码片段,并指定一个唯一的提示符。一......
  • 自定义指令
    Vue是一个流行的JavaScript框架,它允许开发人员构建动态的用户界面和单页应用程序。Vue的灵活性使其成为开发人员的首选框架之一,其中一个重要的原因是其能够自定义指令,以便......
  • 使用Vue自定义组件完成10×10图片表格的点击效果
    1.创建一个web项目,使用<script>引入Vue.js代码如下:<scripttype="text/javascript"src="js/vue.js"></script> 2.创建vue实例<divid="app"></div><scrip......
  • Vue指令:内置指令和自定义指令
    Vue指令Vue指令指的是,以v-开头的一组特殊语法内置指令v-textv-text指令的作用是:设置标签的内容默认写法会替换全部内容,差值表达式{{}}只会替换指定内容内部......
  • C语言自定义数据类型之结构体
    一、结构体1.1结构体的声明语法struct对象名{成员列表;};1.2结构体声明的解释结构体其实与我们在数学中学过的集合本质相同比如,现在有一个描述房子的集合,集合里有许多元素,......
  • 自定义注解和使用
    格式:public@interface注解名{public属性类型属性名 () default默认值;//如果不想给默认值,default可以省略}packageanno;//在使用注解的时候,如果......
  • 带自定义Kubernetes资源验证器的开发人员护栏
    如果你的组织开始采用云原生技术,那么可能仍在研究如何将Kubernetes知识内部化并分发给团队的其他成员。这是一个非常普遍的问题。需求是明确的:为了高效工作并产生高质量的部......
  • SpringBoot——自定义自动配置与起步依赖
    SpringBoot——自定义自动配置与起步依赖SpringBoot为我们提供了灵活强大的自动配置与起步依赖功能,接下来我们参考其实现原理,实现专属于我们自己的自动配置与起步依赖。......
  • 请你详细说说类加载流程,类加载机制及自定义类加载器
    当程序使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、链接、初始化三个步骤对该类进行类加载。加载类加载指的是将类的class文件读入内存,并为之创建一个java.......