记录@Transactional事务只回滚循环中的某次操作,其他循环正常执行

文章讲述了同事在处理循环订单时,遇到部分订单生效失败但未回滚的问题。通过分析,作者揭示了使用`@Transactional(propagation=Propagation.REQUIRES_NEW)`注解可以确保只回滚失败订单,避免影响其他操作。
摘要由CSDN通过智能技术生成

前言:同事在循环订单生效时,某个订单执行生效时报错,其他数据正常生效,报错的呢个订单没有进行事务回滚。订单生效的方法是原来的,他只用调用即可。

他的错误代码:

 for ( String orderNumber : orderList) {
 	try{
	 	//原订单生效方法
	 	orderManager.active(orderNumber);
	 } catch (Exception e) {
	 	//这里捕获了异常导致事务没有回滚
		logger.error(e)
	 }
}

原生效方法的事务注解代码

@Transactional
public void active(String orderNumber){
   //代码逻辑 ,在这里报错了
}

若要实现事务只回滚某个生效失败的单子需要将 @Transactional 注解
修改成 :@Transactional ( propagation = Propagation.REQUIRES_NEW)

原因:
默认@Transactional 是指,上层调用如果有事务就加入事务,没有事务就创建事务执行。
修改成@Transactional ( propagation = Propagation.REQUIRES_NEW) 是指,上层若存在事务,则将上层事务进行挂起,自己新建一个事务进行执行,新建的事务中如果抛错不会影响其他循环执行的操作,自己的方法会进行回滚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值