批处理业务,循环中保证事务的一致性,手动开启提交或回滚

 

说明:业务需求是批量调拨,这些调拨的数据的数据,如果单条成功了,提交事务,就继续执行下一条;如果失败了,也不影响下一条的执行,最后把成功和失败的结果记录上就OK;这就要保证for循环中每一条执行的事务一致性。
每一次循环中必须有一次手痛回滚或者提交的操作,是为了释放事务的资源;
代码为示例子代码,只要关注红色标注部分的代码即可;

@Autowired
private PlatformTransactionManager transactionManager;

/**
 * 批量调拨(不是整个方法事务,支持循环代码块事务)
 *
 * @param fromNode
 * @param toNode
 * @param vehicleList
 * @return
 */
@Override
public List batchAllot(String fromNode, String toNode, List vehicleList, AmpUser user) throws BizException {
    log.info("********************批量调拨开始******************************");
    log.info("出发VDC:{}", fromNode);
    log.info("目的VDC:{}", toNode);
    log.info("调拨数据总条数:{}",vehicleList.size());
    Assert.hasLength(fromNode, "出发VDC不可以为空");
    Assert.hasLength(toNode, "目的VDC不可以为空");
    Assert.notEmpty(vehicleList, "车辆不可以为空");

    VlBaseNode baseNode = feignHelper.getNodesByCode(toNode);
    //调拨时间,每次调拨所有的调拨必须是同一个调拨时间,调拨历史会根据调拨时间和调拨操作人分组查询,确定一次调拨
    LocalDateTime allotTime= LocalDateTime.now();

    List resultVos = new ArrayList<>();
    for (int i=0 ;i
 

你可能感兴趣的:(批处理业务,循环中保证事务的一致性,手动开启提交或回滚)