用于生成数据的Spring MVC Controller安全线程

时间:2016-02-18 05:12:51

标签: java spring multithreading spring-mvc

我有Spring Controller用于将数据保存到数据库,此方法生成receiptNo(使用某个数据库字段值生成receiptNo值),例如:xxx/ddMMyy/compId

其中xxxselect max(substr("receiptNo")) from tablecompId来自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值。

请告知,

0 个答案:

没有答案