当前位置: 首页 > news >正文

多线程事务回滚

最近开发,有地方需要用到多线程,每个线程里面处理多个方法,过程中遇到了一个问题,我们使用平时的@Transactional注解,就是当前一个方法执行完成(比如插入操作),后一个方法是不会事务回滚的。当时觉得很不可思议,后来经过半天时间,终于挖出原因,并成功解决。
我这里先说明原因:多线程底层连接数据库的时候,时使用的线程变量(TheadLocal),所以,开多少线程理论上就会建立多少个连接,每个线程有自己的连接,事务肯定不是同一个了。
解决办法:我强制手动把每个线程的事务状态放到一个同步集合里面。然后如果有单个异常,循环回滚每个线程。
代码如下:

 //先在开启多线程外面,定义一个同步集合:
 List<TransactionStatus> transactionStatuses = Collections.synchronizedList(new ArrayList<TransactionStatus>());
 //开启多线程
 executorService.execute(new Runnable() {
          @Override
          public void run() {
          DefaultTransactionDefinition def = new DefaultTransactionDefinition();
              def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务,这样会比较安全些。
              TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
              transactionStatuses.add(status);
              try{
                  //逻辑1
                  ...
                  //逻辑2
                  ...
              
              }catch(Exception e){
              
              }
          
          }

相关文章:

  • 5.30 Tree Traversal + Tree manipulation
  • 网页视频加速播放
  • 阿里云新一代关系型数据库 PolarDB 剖析
  • 函数模板(四十七)
  • Springboot 整合 dubbo 的一些坑
  • 10 个 Python 初学者必知编码小技巧
  • CentOS7下安装NVIDIA独立显卡驱动出现X service error问题解决方法
  • python爬虫练习--爬取猫眼热映口碑榜
  • Python字符串capitalize center 方法
  • 实验四 shell编程2
  • 接口只用于定义类型(19)
  • 洛谷 P2421 [NOI2002]荒岛野人
  • python第五天学习总结
  • Nginx配置详解
  • ngnix-内网能用,外网不能用
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 230. Kth Smallest Element in a BST
  • Angular 2 DI - IoC DI - 1
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Docker: 容器互访的三种方式
  • gf框架之分页模块(五) - 自定义分页
  • Java面向对象及其三大特征
  • mysql_config not found
  • Redis中的lru算法实现
  • 大快搜索数据爬虫技术实例安装教学篇
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 小程序01:wepy框架整合iview webapp UI
  • 一个JAVA程序员成长之路分享
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​【已解决】npm install​卡主不动的情况
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​低代码平台的核心价值与优势
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #android不同版本废弃api,新api。
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (JS基础)String 类型
  • (WSI分类)WSI分类文献小综述 2024
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)springboot教学评价 毕业设计 641310
  • (九)c52学习之旅-定时器
  • (六)激光线扫描-三维重建
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • ..回顾17,展望18
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .gitignore文件—git忽略文件
  • .Net CF下精确的计时器
  • .NET处理HTTP请求
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • .考试倒计时43天!来提分啦!