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();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值