我是靠谱客的博主 孝顺墨镜,最近开发中收集的这篇文章主要介绍java mybatis plus 多线程 事务 不懂的可以留言哦,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述



/**
 * Spring 事务管理器
 */
@Autowired
private DataSourceTransactionManager transactionManager;


/**
 * transaction 多线程事务 用例。
 *因为Spring 用ThreadLocal进行了线程事务隔离 所以只能每个线程提交各自的事务
 *等待业务逻辑处理完成再同时提交或回滚事务 达到多线程事务
 * @throws Exception
 */
@GetMapping(value = "transaction")
public void transaction() throws Exception{
   //线程计数器
   CountDownLatch countDownLatch = new CountDownLatch(2);
   //用于存储错误信息
   List<String> ststus = new Vector<>();

   //开启线程执行业务逻辑代码
   new Thread(() ->{
      //开启事务
      TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
      //执行具体业务逻辑
      userService.insertUser();
      
      /**
       * add 则表示业务逻辑处理时错误
       */
      //ststus.add("error");

      //无论成功或失败 计数器减1 表示线程业务逻辑处理完成
      countDownLatch.countDown();

      /**
       * 等待计数器为0 所有线程皆处理完
       */
      try {
         countDownLatch.await();
      } catch (Exception e) {
         e.printStackTrace();
      }

      /**
       * 如果 所有业务全部处理完成
       * ststus:为空 没有错误 提交事务 / 不为空 有错误 回滚事务
       */
      if(CollectionUtils.isEmpty(ststus)){
         transactionManager.commit(status);
      } else {
         transactionManager.rollback(status);
      }
   }).start();

   //开启线程执行业务逻辑代码
   new Thread(() ->{
      //开启事务
      TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());

      //执行具体业务逻辑
      userService.insertUser();

      //无论成功或失败 计数器减1 表示线程业务逻辑处理完成
      countDownLatch.countDown();

      /**
       * 等待计数器为0 所有线程皆处理完
       */
      try {
         countDownLatch.await();
      } catch (Exception e) {
         e.printStackTrace();
      }

      /**
       * 如果 所有业务全部处理完成
       * ststus:为空 没有错误 提交事务 / 不为空 有错误 回滚事务
       */ 
      if(CollectionUtils.isEmpty(ststus)){
         transactionManager.commit(status);
      } else {
         transactionManager.rollback(status);
      }
   }).start();
}

最后

以上就是孝顺墨镜为你收集整理的java mybatis plus 多线程 事务 不懂的可以留言哦的全部内容,希望文章能够帮你解决java mybatis plus 多线程 事务 不懂的可以留言哦所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部