加 synchronized 关键字进行同步

       在工作中遇到的一个问题,由于订单编号根据系统数据库中已有的最大编号递增加1的,这样就可能会出现多个人同时操作时,每个人操作时都是取的系统数据库中之前最大的一个编号(假设是006),然后提交时可能就会生成多个007的编号,违反了业务要求的编号唯一的要求。考虑到系统访问量不大,不用考虑高并发的问题,这样问题就很好解决,只需要对这个方法加 关键字 syncharonized 进行同步即可解决。

/**
 * 保存订单基本信息
 *
 * @param orderBaseInfo 订单基本信息对象
 */
@Transactional(rollbackFor = Exception.class)
// synchronized 加关键字进行同步
public synchronized void save(LoginUserDto loginUserDto, OrderBaseInfo orderBaseInfo) {
    orderBaseInfo.setFinishedNumber(BigDecimal.valueOf(0).setScale(2, ROUND_HALF_EVEN));
    orderBaseInfo.setCreateTime(new Date());
    orderBaseInfo.setCreateBy(loginUserDto.getUsername());
    String newOrderNo = findNewOrderNo();//保存订单时再生成订单号,插入数据库
    orderBaseInfo.setOrderNo(newOrderNo);
    orderBaseInfoDao.insert(orderBaseInfo);
}
posted @ 2020-05-20 15:17  风^  阅读(299)  评论(0编辑  收藏  举报