小弟最近在改后端项目,但出了个 bug 又解决不了,我觉得是我的后端知识太欠缺了,特来这里请教。
流程是这样的,前端有上送信息,接口收到信息后,用收到的部分信息再去第三方接口请求信息,把两部分合起来存储。
收到的信息中有一部分是用户ID(绝不重复),我用这个 ID + 收到信息的时刻(精确到秒)做 md5,生成一个唯一的序列号作为主键。
但是有些时候是上传失败的,日志是这么记录的
Could not execute JDBC batch update …… Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (SIT_QDYY.SYS_C0010324) violated
我看了下日志,有两条一模一样的信息,按照我上面说的生成序列号的方法,这样肯定会重复。我和前端确认了下,说是不会有一秒钟上传两次的情况,所以我想是不是我收到信息后的网络请求比较耗时导致的(再想不出别的原因了)?
而且,每一条上传信息不是按顺序处理的,比如说,接口收到了 A 信息,然后解析,打印日志,还没存下来,B 信息的日志就被记录下来了,后面再是用 A 的信息请求第三方接口,存储,等等
我的猜测:
服务器是多线程的,每时每刻都在处理请求,而用 A 请求的数据再去请求第三方接口比较耗时,所以 B 请求来到以后,就去处理 B ,另开一个线程去第三方接口获取 A 相关的数据(这里都是猜测,而且和我那个 bug 有啥关系也不清楚)?
项目用的是 Struts2 + Hibernate + Oracle,部署在 Weblogic 上。
郎朗坤
相关分类