在thre product env中,我们发现重复的主键错误。 IdGenerator.generateId()是线程安全的,所以我怀疑方法setId()不同步,但我无法弄清楚原理的原因。有点像这样: bill.setId(IdGenerator.generateId()) - > {step1:Long id = IdGenerator.generateId(); step2:bill.setId(id);因此,step2中的多线程在step1中共享相同的值。
public long saveBill(Bill bill) throws Exception {
//IdGenerator.generateId() was an synchronized method
bill.setId(IdGenerator.generateId());
return billDao.saveBill(bill);
}