数据库回滚问题,
今天遇到的小问题
@Override
public Result importExcel(MultipartFile file) throws IllegalAccessException, InstantiationException, IOException, InvalidFormatException {
try {
ImportExcel ei;
ei = new ImportExcel(file, 1, 0);
List<FmsPolicyExcel> list = ei.getDataList(FmsPolicyExcel.class);
String sdjStr = this.addExcel(list);
if (sdjStr != null && !"保存成功".equals(sdjStr)) {
return ResultGenerator.genFailResult(sdjStr);
} else {
// estimateOutManageService.saveExcel(list);
return ResultGenerator.genSuccessResult();
}
} catch (Exception e) {
e.printStackTrace();
return ResultGenerator.genFailResult(e.getMessage);
}
}
private String addExcel(List<FmsPolicyExcel> list) {
if (CollectionUtils.isNotEmpty(list)) {
for (int i = 0; i < list.size(); i++) {
//去字符串空格
FmsPolicyExcel excel = (FmsPolicyExcel) StringUtils.trimObject(list.get(i));
if (excel != null) {
//校验必填
String msg = this.checkFmsPolicyExcel(excel);
if (StringUtils.isNotEmpty(msg)) {
throw new SysException("第" + (i+1) + "条规则" + msg);
}
String[] split = excel.getStartPoint().split("-");
if (split.length != 3) {
throw new SysException("第" + (i+1) + "条规则始发区域格式错误!请与系统内的省市区名称保持一致,并以‘-’隔开");
}
Cnarea cnarea = fmsPolicyDao.getStartPoint(split[0], split[1], split[2]);
if (cnarea == null) {
throw new SysException("第" + (i+1) + "条规则始发区域格式错误!请与系统内的省市区名称保持一致,并以‘-’隔开");
}
excel.setStartPoint(cnarea.getCnId());
//添加规则组
FmsPolicyTeam fmsPolicyTeam = this.addFmsPolicyTeam(excel, i);
//添加规则
this.addFmsPolicy(excel, fmsPolicyTeam.getPtmid(), i);
return "保存成功";
}
}
}
return "表格暂无数据";
}
问题描述:
//添加规则组
FmsPolicyTeam fmsPolicyTeam = this.addFmsPolicyTeam(excel, i);
添加成功
//添加规则
this.addFmsPolicy(excel, fmsPolicyTeam.getPtmid(), i);
报错抛出异常,最终addFmsPolicyTeam方法添加的数据未回滚。
未回滚的原因就是在最外层方法importExcel方法体被try catch包裹
因为我这里数据库回滚的条件是RuntimeException,而try catch后异常被人为处理,也就是没有异常了,数据自然不会回滚,
最后将try catch 放到Controller中,即解决