我有Spring Controller
用于将数据保存到数据库,此方法生成receiptNo
(使用某个数据库字段值生成receiptNo值),例如:xxx/ddMMyy/compId
。
其中xxx
为select max(substr("receiptNo")) from table
,compId
来自session
。生成receiptNo
后,该值将保存到另一个表中。
我的控制器是:
@Controller
public class foo{
private Object LOCK_OBJECT = new Object();
@RequestMapping(value = "/generateAndSave", method = RequestMethod.POST)
public ModelAndView generateAndSave(@ModelAttribute("tform") TempForm tform, HttpServletRequest request) {
// Some Logic
synchronized (LOCK_OBJECT) {
String max = doGetMax(tform);
SomePojo domain = doGenerate(max, compId);
doStore(domain);
}
modelAndView.addObject("key", "value");
return modelAndView;
}
}
我的问题是,我应该使用synchronized (LOCK_OBJECT) { }
块来确保唯一receiptNo
吗?
我关注的是xxx
值,如果我不使用synchronized (LOCK_OBJECT) { }
阻止,则某些用户将获得相同的xxx
值。
请告知,