异常如下:
com.jfinal.plugin.activerecord.ActiveRecordException: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction at com.jfinal.plugin.activerecord.DbPro.update(DbPro.java:283) at com.jfinal.plugin.activerecord.Db.update(Db.java:206) at com.tmbj.api.service.insure.TmInsureFenqiService$1.run(TmInsureFenqiService.java:1310) at com.jfinal.plugin.activerecord.DbPro.tx(DbPro.java:694) at com.jfinal.plugin.activerecord.DbPro.tx(DbPro.java:748) at com.jfinal.plugin.activerecord.Db.tx(Db.java:460) at com.tmbj.api.service.insure.TmInsureFenqiService.updateFenqiLineStateById(TmInsureFenqiService.java:1297)
    /**
     * 用户提交申请
     */
public  CommonResult updateFenqiLineStateById(Record record){
 CommonResult commonResult = new CommonResult();
 commonResult.setCodeAndMsg(Constant.SUCCESS_CODE, Constant.SUCCESS_MSG);
 String fenqiLineIds=record.get("fenqiLineIds");
 Long insureInfoId=record.getLong("insureInfoId");
 String[]fenqiLineIdsStr=fenqiLineIds.split(",");
 //默认待支付
 Integer state = 5;
 for (String fenqiLineId:fenqiLineIdsStr){
    Record lineRecord=Db.findById("tm_insure_fenqi_line",fenqiLineId);
    // 待审核
    if (lineRecord.getInt("insureType") == 1 || lineRecord.getInt("fenqi") == 1) {
        state = 3;
      }
 String sql="update tm_insure_fenqi_line t set t.state=?,t.modifyTime=?,t.modefier=? where id=?";
 int bCount= Db.update(sql,state,new Date(),insureInfoId.intValue(),fenqiLineId);
   if (bCount>0) {
    //修改成功调用推送方法
     ******************推送省略*************************
   } else {
    commonResult.setCodeAndMsg(ErrorCode.ERROR_CODE, "用户提交申请失败!");
   }
   ommonResult.setData(record);
   }
  return commonResult;
}
 项目:JFinal
 
 
 
 
 
 
 
如果你的已然是 InnoDB,只能是从 sql 以及程序结构上去调整,数据库本身是无法杜绝所有死锁的,很多死锁数据库是让其失败然后释放锁来解决