for循环下,如何保证for循环里面的每一次执行都是一个独立的事务

当假设有一个大小为10的for循环,当执行到第二个数据的时候,出现异常,可以保证不影响已经执行已经执行的语句,以及余下的8次执行,单独catch住第二次的执行所抛出的异常。
可以使用以下的策略:
1、在一个Aservice实现类的方法里面定义一个for循环,Aservice实现类上面加上@Transactional(rollbackFor = Exception.class)注解;
2、再在这个for循环里面调用另一个Bservice的实现类方法,在Bservice的实现类的上面加上@Transactional(propagation = Propagation.REQUIRES_NEW)注解

 

testBatchUpdate和testUpdate一定要写在不同的文件中,否则事务是不生效的

TestTransactionServiceImpl.java


@Transactional(rollbackFor=Exception.class)
	@Override
	public void testBatchUpdate()  {
		List<User> listUser = getUserData();
		List<UserInfo> listUserInfo = getUserInfoData();
		for(int i=0;i<listUser.size();i++){
			try{
				testTransactionService1.testUpdate(listUser.get(i),listUserInfo.get(i));
			}catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	
	private List<User> getUserData(){
		List<User> listUser = new ArrayList<>();
		User user1 = new User();
		user1.setUserId("test1");
		user1.setUserName("test1");
		user1.setAge(20);
		user1.setSex(1);
		user1.setAddress("xian");
		user1.setEmail("111"); 
		
		User user2 = new User();
		user2.setUserId("test2");
		user2.setUserName("test2");
		user2.setAge(20);
		user2.setSex(1);
		user2.setAddress("xian");
		user2.setEmail("111"); 
		
		User user3 = new User();
		user3.setUserId("test3");
		user3.setUserName("test3");
		user3.setAge(20);
		user3.setSex(1);
		user3.setAddress("xian");
		user3.setEmail("111"); 
		
		listUser.add(user1);
		listUser.add(user2);
		listUser.add(user3);
		return listUser;
	}
	
	private List<UserInfo> getUserInfoData(){
		List<UserInfo> listUserInfo = new ArrayList<>();
		
		UserInfo userInfo1 = new UserInfo();
		userInfo1.setUserId("test1");
		userInfo1.setUserLevel("1");
		userInfo1.setEnableFlag(true);
		userInfo1.setRemark("remark1");
		userInfo1.setMc("mc1");
		
		UserInfo userInfo2 = new UserInfo();
		userInfo2.setUserId("test2");
		userInfo2.setUserLevel("1");
		userInfo2.setEnableFlag(true);
		userInfo2.setRemark("remark2");
		userInfo2.setMc("mc2");
		
		UserInfo userInfo3 = new UserInfo();
		userInfo3.setUserId("test3");
		userInfo3.setUserLevel("111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111");
		userInfo3.setEnableFlag(true);
		userInfo3.setRemark("remark3");
		userInfo3.setMc("mc3");
		
		 
		listUserInfo.add(userInfo1);
		listUserInfo.add(userInfo2);
		listUserInfo.add(userInfo3);
		
		return listUserInfo;
	}

TestTransactionService1Impl.java

@Transactional(rollbackFor=Exception.class,propagation = Propagation.REQUIRES_NEW)
	public void testUpdate(User user,UserInfo userInfo)  {
		userMapper.addUserInfo(user);
		userInfoMapper.addUserInfo(userInfo);
}  

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值