Java的循环遍历,如何保证每个循环体都是单独的事务

        不知道大家在实际开发的过程中,有没有遇到过类似的情况:比如有这么一个定时任务,需要定时处理一些超时未付款的订单。然后你查询所有符合条件的记录(假设有10条记录),接着for循环遍历每一个订单,每个循环体都要执行大量的业务,比如商品库存回退,订单状态修改,业务流水添加,消息推送等。你前五个循环都执行成功了,可是执行第六个循环的时候突然抛出一个异常,导致你前面五个执行成功的订单都事务回滚了,就有种三国的赤壁之战,曹军铁索连舟,一荣俱荣,一损俱损的感觉,是不是很蛋疼?你还真别笑,我接手公司项目的时候,还真的就看到前面的开发这样写代码。没办法,既然现在是咱接手,还就得老老实实的填坑了。
       解决方案其实很简单,只需要一两段代码就能解决,本人亲测有效,当时测试的方式是:查询的10条记录,设置第6条出现异常,然后在10个循环都结束完后,发现只有第6条记录保持原样(异常时事务回滚),而它前面的5条和后面的4条都正常执行,并没有受影响。

我的项目用的是ssm框架,使用spring自带的定时任务,下面开始上伪代码:

先是OrderTimer.java类:该类是获取所有符合要求的记录,也就是获取这个集合,然后开始遍历执行每条符合要求的记录,注意具体执行的业务要封装到另一个方法中,也就是封装到业务层处理,不单单只是因为代码规范,更主要的是因为封装在另一个方法,才能更随心所欲的设置事务的传播属性。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值