关于spring service层异常的处理

一般情况下,我们不需要对service层的异常做什么处理,类似于事务回滚,spring也会帮我们做了。但是一旦我们自己需要catch一些异常,自己做了处理,也是可以的,但是。但是。我们不由得联想到,spring还会捕获到这些异常吗?万一捕获不到,事务回滚就不会执行,就会出现脏数据。。。。。这样的后果,心理感觉很猥琐啊!

 

而事实就是如此!你会发现,如果你自己捕获了异常,spring的自动事务回滚功能消失了!

 

如何保证自己处理了异常,还能让spring帮忙做好事务回滚?解决方法来了,就是在你自己处理过异常之后,再throw new RuntimeException(),注意,是RuntimeException,不是Exception,怎么样,spring又乖乖的听话了,呵呵。不过,有一点需要提醒一下,如果你在catch异常时,需要对数据库操作,那么spring不会区别这部分是有用功,一视同仁的清理掉了,所以这里要起另外一个事务来处理那些有用功,并且手动提交掉。也可以使用如下方法做处理:在service层上再套一层,该层不做事务控制,有用功就写在该层。需事务控制的仍保留在下层。

 

另外,对于使用spring来管理hibernate异常的情况,在service层是没办法捕获到hibernate异常的,如果你真的想对它进行处理,到调用spring service的上一层去吧,这个可能是webwork的Action,也可能是暴露在外的webservice。

 

由此,spring service层的异常我们都可以自己来处理了!

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值