首页 > 其他分享 >循环体中对单个事务进行回滚操作

循环体中对单个事务进行回滚操作

时间:2023-04-16 12:38:10浏览次数:37  
标签:回滚 循环体 service NEW 事务 当前 单个 注解

执行事务操作时,某个事务中需要多次循环,每次循环之中又有不同的事务,这个时候想让其中一个事务即使抛异常了,也不影响之前的事务和之后的事务提交

例如:批量对表格中每一个数据进行处理,每次处理涉及到其他多张表,如果运行到一半,其中一个表为空,导致整体事务回滚,之前的数据插入也失败了,这显然不符合当前预期。

解决方案:

1、在当前service实现类方法中加上@Transactional(rollbackFor = Exception.class)事务回滚注解,在遍历中对具体需要单个回滚的操作抽离出一个方法,写在当前service实现类

循环体中对单个事务进行回滚操作_回滚

2、给抽离出的方法加上@Transactional(propagation = Propagation.REQUIRES_NEW)注解 该注解的意思是如果当前存在事务,那么将当前的事务挂起,并开启一个新事务去执行REQUIRES_NEW标志的方法。

循环体中对单个事务进行回滚操作_数据_02

经过测试发现,即使是在i==4的情况下,外层事务抛出了异常,也不会回滚之前或者之后的事务,除了抛出异常的那个对象以外,列表中所有其他对象均已提交事务添加到数据库中了。

标签:回滚,循环体,service,NEW,事务,当前,单个,注解
From: https://blog.51cto.com/u_14651965/6193427

相关文章

  • #yyds干货盘点#Spring事务回滚的两种方法
    Spring事务回滚的前提是你当前使用的数据库必须支持事务,比如MySQL的Innodb是支持的,但Mysaim则是不支持事务的。方法一使用@Transaction来配置自动回滚,可以配置在类上,也可以配置在方法上(作用域不同),但对final或private修饰的方法无效,且该类必须是受spring所管控的,也就是被已经被注......
  • uni-app中IM的发送的修改以及回滚底部的修改
    在使用的过程中发现输入文字之后没有相关的发送按钮,所以对TUIKit/TUIPages/TUIChat/components/message-input/index.vue做微调,如下微调内容:添加@input方法<inputclass="TUI-message-input-area":adjust-position="true"cursor-spacing="20"......
  • pytest + yaml 框架 -24.单个用例中参数化功能实现
    前言早期版本参数化功能实现只支持在config中全局的地方写parameters关键字,只实现了基本的功能。v1.2.1版本对parameters参数化功能做了进一步的细分,支持在case用例中针对单个用例的参数化了。parameters参数化用例参数化的实现,我设计了2种实现方式参数化方式1:con......
  • 使用java.util.zip对生成的字节数组输出文件流 进行打包压缩(单个、批量),并返回压缩包
    废话不多说直接上代码 packagegov.test.util;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.util.List;importjava.util.Map;importorg.apache.tools.zip.ZipEntry;importorg.apache.tools.zip.Zip......
  • spring事务里面开启线程插入,报错了是否会回滚?
    1.前言一道非常有意思的面试题目。大概是这样子的,如果在一个事务中,开启线程进行插入更新等操作,如果报错了,事务是否会进行回滚2.代码示例1@RequestMapping("/test/publish/submit")publicStringtestPublish1(){ log.info("start..."); transactionTemplate.execute(new......
  • 业务镜像版本升级及回滚
    在指定的deployment中通过kubectlsetimage指定新版本的镜像:tag来实现更新代码的目的。构建三个不同版本的nginx镜像,第一次使用v1版本,后组逐渐升级到v2与v3,测试镜像版本升级与回滚操作1:升级到镜像到指定版本:#kubectlapply-fnginx.yaml--record=true#v1版本,--r......
  • head/reset/revert/rebase代码回滚全解:git提交记录的背后原理
    多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,操作有:回退(reset):reset是彻底回退到指定的commit版本,该commit后的所有commit都将被清除;reset执行后不会产生记录反转(revert):revert仅是撤销指定commit的修改,并不影响后续......
  • 35.将多实体文件保存成单个零件
    一、基本参数1.定义:通过插入新零件的方式可将多实体零件的部分实体单独保存成零件 二、基本操作及内容1.点击命令 2.参数信息 3.原部件与导出实体的关系4.单位是否沿用原部件的  ......
  • 局域网主机共享单个公网IP地址接入Internet(SNAT)
    SNAT策略的原理   源地址转换,SourceNetworkAddressTranslation   修改数据包的源IP地址1.准备一台局域网里的主机做客户机,配置好ip、子网掩码,网关,dns服务器地址 局域网各主机正确设置IP地址/子网掩码 局域网各主机正确设置默认网关地址/dns服务器地址 内网的虚拟机......
  • Linux 运行dotnet Core发布的单个文件
    1、发布  2、拷贝  3、运行cd/MySelf/Core_Jun./Core.Jun.DataCollect2>&1 ......