spring手动开启事务,手动提交事务,手动回滚事务

2023-10-26

1.未加事务注解(或者事务配置), 所以需要手动开启事务和手动提交事务和手动回滚事务

@Autowired
  private PlatformTransactionManager txManager;

  @Autowired
  private ShopGroupBuyDao shopGroupBuyDao;

  @GetMapping(value = "/transactionDemo")
  public void ceshi() {

    // 手动开启事务  start
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
    TransactionStatus status = txManager.getTransaction(def);
    // 手动开启事务  end

    try {

      ShopGroupBuy shopGroupBuy = shopGroupBuyDao.selectOne(new LambdaQueryWrapper<ShopGroupBuy>()
                                                                .eq(ShopGroupBuy::getGroupBuyId, 505));

      shopGroupBuy.setGroupBuyTheme("wulin11");

      int i = shopGroupBuyDao.updateById(shopGroupBuy);

      int a = 1 / 0;

      // 手动提交事务  start
      txManager.commit(status);
      // 手动提交事务  end

      if (i > 0) {
        System.out.println("更新成功");
      } else {
        System.out.println("更新失败");
      }

    } catch(Exception e) {

      e.printStackTrace();

      // 手动回滚事务  start
      txManager.rollback(status);
      // 手动回滚事务  end
      
    }
  }

 

 

 

 

2.加事务注解

这里演示加了事务注解(@Transactional(rollback=Exception.class)), 且在代码中也加了try catch相当于没有加事务注解, 所以事务不起作用, 此时就需要在catch里面手动添加事务的回滚,即这样:也可以参考博客:https://blog.csdn.net/qq_26106607/article/details/83827630

  @Autowired
  private ShopGroupBuyDao shopGroupBuyDao;

  @GetMapping(value = "/transactionDemo")
  @Transactional(rollbackFor = Exception.class)
  public void ceshi() {

    try {

      ShopGroupBuy shopGroupBuy = shopGroupBuyDao.selectOne(new LambdaQueryWrapper<ShopGroupBuy>()
                                                                .eq(ShopGroupBuy::getGroupBuyId, 505));

      shopGroupBuy.setGroupBuyTheme("wulin11");

      int i = shopGroupBuyDao.updateById(shopGroupBuy);

      int a = 1 / 0;

      if (i > 0) {
        System.out.println("更新成功");
      } else {
        System.out.println("更新失败");
      }

    } catch(Exception e) {

      e.printStackTrace();

      // 手动回滚事务  start
      TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
      // 手动回滚事务  end

    }
  }

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring手动开启事务,手动提交事务,手动回滚事务 的相关文章

随机推荐

  • C算法:冒泡排序算法(超级详细)!!!

    冒泡排序算法 冒泡排序是一种简单的排序算法 它也是一种稳定排序算法 其实现原理是重复扫描待排序序列 并比较每一对相邻的元素 当该对元素顺序不正确时进行交换 一直重复这个过程 直到没有任何两个相邻元素可以交换 就表明完成了排序 一般情况下 称
  • 常用的三种代码宏定义

    常用的三种代码宏定义 方式一 if endif 方式二 ifdef endif 方式一 if和方式二 ifdef别混搅 方式三 ifndef define else endif 方式一 if endif define LEDTEST 1 1
  • 文件解压缩操作

    文件解压缩操作 package com general system import java io File import java io FileOutputStream import java io IOException import
  • 无监督学习(含自编码器在MNIST上的图片重建实战)

    目录 1 无监督特征学习 1 1 PCA 主成分分析 1 2 稀疏编码 1 3 自编码器 2 自编码器在MNIST上的图片重建实战 3 自编码器变种 3 1 稀疏自编码器 3 2 堆叠自编码器 3 3 降噪自编码器 3 4 对抗自编码器 3
  • 【Qt5】频繁调用update()若干时间后无法自动重绘界面的问题

    最近在项目中遇到了这样的问题 程序的结构 主线程用于界面控制 线程1用于生成显示内容 线程2用于精确控制在正确的时刻控制界面显示生成的内容 实现方式 在线程2中直接调用显示控件的update 方法 让主线程重绘 运行效果 运行开始后的一段时
  • git创建本地仓库的三种方法

    首先新建文件夹E git repository repo1 然后打开该目录 接下来 有三种方式创建本地仓库 第一种方法 右键 单击git GUI here 点击创建仓库 然后关闭即可 此时可以看到新生成的文件夹 git 注意 git是隐藏文
  • Hive 分组取Top N

    成绩表S 字段sid cid score 求每门课程的前2名与后2名sid with a as select sid rank over distribute by cid sort by score rn rank over distri
  • 入门电机系列之3舵机

    入门电机系列 基于STM32硬件 本文章学习借鉴于野火团队资料 以表感谢 官网http products embedfire com 舵机的原理与应用 文章目录 入门电机系列 基于STM32硬件 前言 一 舵机的分类 舵机结构 舵机工作原理
  • 安装Java后端钉钉新的jar包指令

    install install file Dfile lib dingtalk sdk java taobao sdk java auto 1479188381469 20200403 jar DgroupId com taobao Dar
  • linux命令高亮显示,linux命令行高亮显示

    Loading gt 我们常用命令的朋友知道 纯黑白的看命令 时间长了很是不舒服 那么接下来就进行下命令行高亮的个性化的配置吧 想永久性的设置命令行高亮的效果 就需要修改 bashrc配置文件 一 进入 bashrc文件目录 bashrc这
  • 了解基础的docker容器化

    一 什么是docker容器 docker容器简单说来就是码头工具 docker是一个开源的的应用容器引擎 docker的图标是一个鲸鱼上有很多集装箱 docker就是鲸鱼 他上面的集装箱就代表各个容器 docker容器在目前的环境中大部分公
  • Freemarker常用语法简例(二)

    为使用Freemarker模板时的关键性语法编写代码示例或说明 主要用于回忆性检索或速查 阅读需要一定代码基础或对Freemarker有了解 常用Freemarker语法简例 常用Freemarker语法简例 二 bool值 lt 输出 t
  • 大数据——Java多线程

    多线程 认识线程 进程 线程 多线程的优势 编写线程类 使用Thread类创建线程 使用Runnable接口创建线程 使用Callable接口创建线程 线程的状态 新生状态 New Thread 可运行状态 Runnable 阻塞状态 Bl
  • 【网络】【应用层】常见的应用层协议

    文章目录 1 HTTP HTTPS 概述 HTTP工作过程 HTTP特点 发展过程 HTTP0 9 HTTP1 0 HTTP1 1 当前普遍使用的版本 SPDY 了解 HTTP2 0 二进制分帧层 头部压缩 服务端推送 流优先级 HTTP2
  • springCloud中feign的使用

    springCloud中feign的使用 定义一个feign的接口 定义一个feign的接口 定义fegin接口 使用 FeginClient注解指向对应的服务 FeignClient value iyb test url ms iyb t
  • 【Elasticsearch】ES内存满问题排查思路

    1 概述 转载 https bbs huaweicloud com forum thread 69710 1 1 html 2 问题排查思路 场景1 内存参数配置不合理 场景2 查询返回的size过大 场景3 深度翻页查询 场景4 聚合的数
  • 【iOS】属性关键字

    文章目录 前言 一 深拷贝与浅拷贝 1 OC的拷贝方式有哪些 2 OC对象实现的copy和mutableCopy分别为浅拷贝还是深拷贝 3 自定义对象实现的copy和mutableCopy分别为浅拷贝还是深拷贝 4 判断当前的深拷贝的类型
  • 论文阅读技巧之三遍法

    本文介绍了三遍法及其在文献调查中的应用 关键的思想是 你应该以三遍的时间来阅读论文 而不是从一开始就一直读到最后 每个pass都实现了特定的目标 并建立在前一个遍的基础上 第一个pass让您对本文有一个大致的了解 第二步让你掌握论文的内容
  • es查询对应索引下的数据结果

    执行语句 GET test index mapping pretty test index 索引名称 mapping 查询索引的结构 pretty 是参数 意思是格式化数据
  • spring手动开启事务,手动提交事务,手动回滚事务

    1 未加事务注解 或者事务配置 所以需要手动开启事务和手动提交事务和手动回滚事务 Autowired private PlatformTransactionManager txManager Autowired private ShopGr