问题原因是手动开启了事务,但是未提交或回滚事务。
原程序大致如下:
R r = new R(); //开启事务 try { if(true){ r.setCode(1); r.setMsg("XXX错误!"); return r; } transactionManager.commit(status);//提交事务 } catch (Exception e) { e.printStackTrace(); transactionManager.rollback(status);//回滚事务 r.setCode(1); r.setMsg("导入异常!" + e.getMessage()); } return r;
问题就出在if里的return,想法是数据格式校验出错就直接返回用户错误提示,但是导致了只开启了事务,未提交也未回滚。
修改:去除return,改为抛出异常
throw new RuntimeException("XXX错误!");
增加
catch (RuntimeException e) { e.printStackTrace(); transactionManager.rollback(status); r.setCode(1); r.setMsg(e.getMessage()); }
修改后服务终于没有莫名其妙的挂掉了