与服务端通信的时候遇到的一个小坑
用java做了大半年的后台,第一次和服务端通信,也算是初次接触到服务端的东西吧,接触到的第一个坑就是将对服务器的请求写入到了后台的一个事物中
结果是服务端和我的后台同时去修改数据库中同一个表中的数据,导致死锁!后台请求的时候老是请求不到,得不到返回结果,找了好久。。。
觉得是个不错的教训,值得记录一下,问题代码如下:
if(mvInfo.getMvStatus() == 4){//强制下架
Map<String, Object> map = new HashMap<>();
map.put("mvId", mvInfo.getMvId());
map.put("userId", mvInfo.getUserId());
String isLike = template.selectOne("mvInfo.queryMvLike", map);//用户是否喜欢了自己的该mv
template.delete("mvInfo.deleteRankInfo", mvInfo);//删掉排行榜中该mv的信息
mvInfo.setIsLike(isLike);
template.update("mvInfo.updateUserMvInfo2", mvInfo);//维护用户mv信息
sysMsg.setContent("经用户举报,您上传的MV《" + mvInfo.getMvName() + "》" + MsgContent.MV_XIAJIA);//下架通知内容
sysMsg.setHeadline(MsgContent.MV_XIAJIA_TITLE);
template.insert("reportInfo.handleMessage", sysMsg);//系统消息中插入此条下架信息
sysMsg.sethUrlOrId(mvInfo.getMvId());
businessReq.post(pushUrl, JsonUtil.objectToJson(sysMsg));//发送通知(该请求导致死锁)
return sysMsg;
}