• 非分布式-多线程事务控制核心代码1


    文件在D:\E\学习文档子目录压缩\数据库\事务\事务--非分布式事务\多线程事务控制    


    id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        name="dataSource" ref="dataSourceProxy" />

    @Autowired
    @Qualifier("transactionManager")
    private DataSourceTransactionManager transactionManager;

    @Override
    @Transactional(rollbackFor={Exception.class})
    public String ss(List list) {
           }
        updateBatchById(list);
        addLog(list, "release");

    // 发布时同步发布的数据到另一个系统的数据库,上面哪个Transactional没办法管到线程中的事务,因为线程会重新建立一个数据库连接
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                logger.info("发布时同步发布的数据到另一个系统的数据库-开始");
                DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
                definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

    //开启事务
                TransactionStatus status = transactionManager.getTransaction(definition);
                List<CC> ccList= cMapper.selectBatchIds(ids);
                List<DD> ddList = dMapper.selectDataByHd(ids);
                List<EE> eeList = eMapper.selectDataByHd(ids);
                try {
                    Lists.partition(ccList, 500).forEach(ccs -> cocSaMapper.insertReleaseHd(ccs ));
                    Lists.partition(ddList , 500).forEach(dds -> cocSaMapper.insertReleaseFltInfo(dds ));
                    Lists.partition(eeList , 500).forEach(ees -> cocSaMapper.insertReleaseDt(ees ));

    //提交事务
                    transactionManager.commit(status);
                    logger.info("发布时同步发布的数据到另一个系统的数据库-结束");
                } catch (Exception e) {
                    logger.error("发布时同步发布的数据到另一个系统的数据库-失败", e);
                    transactionManager.rollback(status);

                    logger.error("ccList=",ccList);
                    logger.error("ddList=", ddList);
                    logger.error("eeList=", eeList);
                }
            }
        });
        thread.start();
        return null;
    }

  • 相关阅读:
    阿里云国际版虚拟主机上设置网站和域名教程
    webfunny埋点系统
    【MySQL】数据库事务的理解~
    Python---练习:封装一个函数,用于生成指定长度的验证码
    CSS高度塌陷问题和外边距重叠的解决方案(clear方法)
    set_data_check做等长线
    非一线工程管理者的一对一沟通
    1. Nginx 基本功能配置
    如何识别图片文字?这几个识别图片文字软件简单又高效
    机器人阻抗与导纳控制的区别
  • 原文地址:https://blog.csdn.net/xiangshuai198807/article/details/126353280