在service层try/catch后如何保证 事务

首先了解一下异常的组成:

1、RuntimeException()  例如:数组越界异常、空指针异常、(我们在编写之后不会提示让 try catch的异常、代码编写错误导致,可避免)

2、非RuntimeException() 例如: IO异常、(会提示try catch的异常,不是代码编写错误导致的,只能抛出)

3、unchecked异常:RuntimeException + Error

4、checked异常:非RuntimeException()

详细文章:http://blog.csdn.net/qq_14982047/article/details/50989761

spring通过异常进行事务回滚的机制:

1、spring 的默认事务机制,当出现unchecked异常时候回滚,checked异常的时候不会回滚;

2、我们有时为了打印日志,会在service层抓住Exception并打印日志,这时我们的所有异常都会被认为成checked异常。

3、为了事务的正常生效:当有try catch后捕获了异常,事务不会回滚,如果不得不在service层写try catch 需要catch后 throw new RuntimeException 让事务回滚;

例子:

try {
} catch (Exception e) {
e.printStackTrace();
logger.error(“发生异常”);
throw new RuntimeException();
}
如何保证在有返回值的方法中进行异常的捕获?

方法1:

因为要保证当前方法具有返回值,在前端界面展示操作状态。所以我们service层在添加了try catch日志打印后,抛出的runtime类异常需要在controller层进行捕获,捕获之后,在catch中编写操作失败后返回值的信息。

方法2:

不依赖于spring的异常捕获机制进行事务回滚,通过手动的session.rollback进行异常捕获后回滚事务也可。


作者:开着小马奔腾哟
来源:CSDN
原文:https://blog.csdn.net/lpp_dd/article/details/79020046
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/weixin_42844971/article/details/85004678