文件在D:\E\学习文档子目录压缩\数据库\事务\事务--非分布式事务\多线程事务控制
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
@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;
}