100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java事务抛异常_java中抛异常后如何使事务回滚

java事务抛异常_java中抛异常后如何使事务回滚

时间:2022-04-16 01:20:24

相关推荐

java事务抛异常_java中抛异常后如何使事务回滚

spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作

代码中try……catch抛出的Exception异常,属于检查型异常,Spring的框架默认是不会进行回滚的。所以必须在service捕获异常,然后再次手动 throw 一个非检查型异常,这样事务方才起效.

首先方法名前面有:@Transactional,下面介绍三种使事务回滚的方式

1.手动throw异常,让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理

try{

…………

} catch (Exception e) {

…………

throw new RuntimeException(e);

}

2.通过注解参数改变默认的回滚方式 。

在@Transaction注解中定义了noRollbackFor和RollbackFor来指定某种异常是否回滚。

使用例子:

@Transaction(noRollbackFor=RuntimeException.class)

@Transaction(RollbackFor=Exception.class)

所以上述的问题可以直接将@Transaction

添加回滚参数@Transaction(RollbackFor=Exception.class) ,这样就改变了默认的事务处理方式。

3.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。