关于SSM框架下事务的处理

前些天在处理Excel文件导入时,有一个需求,就是将错误行以及错误的列、原因告知,并且不能将之前的内容导入:

分析:

        1.批量导入时,出错就返回,并且之前的数据不添加进数据库中,涉及事务的回滚——方法写在Service中,出错了绝对不能简单的return了事;

        2.提示出错信息,具体行数,原因——在循环中要结束函数,并且要将信息传递到Controller中;


刚开始做时,想到肯定不能在方法中抛出异常,控制台报错信息真的很难看;

后来想到使用try...catch...配合runtimeexception,因为在Service中单独try异常,会直接在catch块中被处理掉,意味着方法出现异常,但是进行了处理,方法正常执行完,事务并不会回滚,throw同理;

具体做法就是在catch中抛出runtimeexception,但是很快发现,事务进行了回滚,但是因为是运行时异常,而且是在catch块中,所以控制台还是很给面子的刷红了,后来参考另一种说法,自定义异常类继承runtimeexception,把错误提示作为构造方法的参数;但是尝试之后并没有解决问题,而且好像并不需要自定义异常,因为 new RuntimeException("错误信息")是可以通过e.getmessage()来获取错误信息的;

    最后,还是找到了解决方法:在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常

注:我还是个年轻人,如有打脸的地方,请轻点打。。。

转载自:https://blog.csdn.net/yipanbo/article/details/46048413

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值