基于注解的事务处理,默认的是check exception不会回滚,unchecked exception会回滚,工作中遇到了关于事务处理的问题,
如下:
@Transactional public ManualReport copy(ManualReport from, ManualReport to) { //记录复制的manual_reportId long copyId = from.getId(); to = from; try { ManualReport manualReportCopyResult = null; if(to.getSendType().equals(ManualReportEnum.ManualReportSendType.INSTANT.value)){ manualReportCopyResult = new ManualReport(System.currentTimeMillis(), to.getMailReceivers(),to.getSmsReceivers(),to.getSendType(), to.getName()+"复制",ReportEnums.SendStatus.waitSend.value,
to.getWeChatReceivers(),ManualReportEnum.ManualReportStatus.EDIT.value, to.getSendTime(),to.getUserToken()); }else { manualReportCopyResult = new ManualReport(System.currentTimeMillis(), to.getMailReceivers(),to.getSmsReceivers(),to.getSendType(), to.getName()+"复制",ReportEnums.SendStatus.willSend.value,
to.getWeChatReceivers(),ManualReportEnum.ManualReportStatus.EDIT.value, to.getSendTime(),to.getUserToken()); } ManualReport manualReport = this.save(manualReportCopyResult); //记录复制后的id long reportId = manualReport.getId(); copyPanel(copyId, reportId); return manualReport; } catch (Exception e) { logger.error("copy Manual Report Error: {}",copyId, e); } }
在调试的时候,写一个NullException,由于在try...catch(){}中已经捕获,所以即使有异常也
不会执行事务的回滚操作,
如果想要执行事务的回滚操作,则在catch中throw new RuntimeException(),
本文探讨了基于注解的事务处理机制,并通过一个具体的代码示例解释了checked与unchecked异常对事务回滚的影响。文章重点在于如何确保事务正确回滚,尤其是在使用try...catch结构时。
3695

被折叠的 条评论
为什么被折叠?



