Java 中的 for 循环如何进行全局回滚?
将整个for循环放在try-catch块中,这样循环中途报错时会触发catch块,从而进行全局回滚。\n\n完整代码如下:\n\njava\npublic List<JsonResult> startProcessBatch(@ApiParam @RequestBody List<ProcessStartCmd> startCmdList) {\n List<JsonResult> result = new ArrayList<>();\n try {\n for (ProcessStartCmd startCmd : startCmdList) {\n JsonResult jsonResult = handReq(startCmd);\n if (!jsonResult.isSuccess()) {\n result.add(jsonResult);\n continue;\n }\n BpmDef bpmDef = (BpmDef) jsonResult.getData();\n boolean hasRight = systemClient.findAuthRight("BPM", "def.start", bpmDef.getTreeId());\n if (!hasRight) {\n result.add(JsonResult.Fail("你没有启动权限!"));\n continue;\n }\n\n String operate = startCmd.isHasPk() ? ProcessStartCmd.OPERATE_LIVE : ProcessStartCmd.OPERATE_START;\n try {\n //启动流程\n BpmInst bpmInst = bpmInstService.doStartProcess(startCmd, bpmDef, operate);\n jsonResult.setDetailMsg(JSON.toJSON(startCmd.getVars()).toString());\n //发送任务消息通知\n messageService.sendMsg();\n result.add(jsonResult.setData(bpmInst)\n .setSuccess(true).setMessage("成功启动流程!"));\n } catch (Exception e) {\n bpmInstService.handStartException(e);\n result.add(null);\n }\n }\n } catch (Exception e) {\n // 全局异常处理,进行回滚操作\n result.clear();\n result.add(JsonResult.Fail("出现异常,操作已回滚!"));\n }\n return result;\n}\n
原文地址: https://www.cveoy.top/t/topic/qeow 著作权归作者所有。请勿转载和采集!