• 非分布式-多线程事务控制核心代码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;
    }

  • 相关阅读:
    PTA题目 谁先倒
    Java内存模型JMM
    3D工业相机及品牌集合
    【C++】基础知识点回顾 中:函数重载、引用和内联函数
    深入理解计算机系统,汇编的流程控制
    黑马程序员前端实战项目---PC端品优购(下)
    文件加密,数据防泄密软件
    【从零开始学习 UVM】2.3、UVM 基础功能 —— UVM Object Print
    NOSQL Redis 数据持久化
    Linux执行命令
  • 原文地址:https://blog.csdn.net/xiangshuai198807/article/details/126353280