在作業中遇到的一個問題,由于訂單編號根據系統資料庫中已有的最大編號遞增加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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/187326.html
標籤:Java
