手动提交事务和在for循环里进行事务控制及声明式事务的使用实例!

本文介绍了在处理批量数据时如何进行事务控制的两种方法。在for循环中,针对每条数据执行查询、比较和更新操作,需要确保事务的正确提交和回滚。方法一是在Controller层获取数据并调用Service层进行事务控制;方法二是在Service层手动处理事务的提交和回滚。关键点在于for循环中事务的开启位置,以防止多次提交事务的错误。
摘要由CSDN通过智能技术生成

事务场景:需要做一个跑批进行一个流程的实现,0.获取异常数据(多条),for循环对单条数据进行下面三个操作:1).调用别的系统进行查询,2).查询自己的库中数据,3)更改自己数据库中的数据状态。此时就需要对单条数据操作的3步骤进行事务控制,使用的过程中发现两个解决办法:第一:在controller层进数据的获取,for循环处理单条数据时调用service层进行事务的控制.第二:在service层进行事务的手动提交和回滚。(for循环需要注意:事务的开启需要在for循环中,否则会报多次提交事务:do not commit or rollback more than once per transaction)

下面贴代码:第一种:在controller层进数据的获取,for循环处理单条数据时调用service层进行事务的控制、

@Controller
public class TestController {
		@Resource
		private IClearNoUnfreezeBs iClearNoUnfreezeBs;
		//逻辑放到controller中,service进行事务控制start
		@RequestMapping("/freeze")
		public void testfreeze() throws Exception{
			try {
				//1.取数据
				ist<String> policyList1 = iClearNoUnfreezeBs.getunfreezedate();
				//2.for循环处理每条数据
				for (String policyno : policyList1) {
					n++;
					try {
						//需要进行事务控制的放到service层进行处理
						iClearNoUnfreezeBs.bs_clearNoUnfreeze( policyno,n );
					} catch (Exception e) {
						continue;
					}
				} 
			} catch (Exception e) {
				e.printStackTrace();
			}
		}		
}

第二:在service层进行事务的手动提交和回滚

@Service
public class ClearNoUnfreezeBs implements IClearNoUnfreezeBs {
	private static
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值