后面事务依赖前一个事务,如何在一个事务中部分事务先提交
项目中经常存在一个事物中先提交后面事务再操作,如何保证前一个事务提交成功?
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED,rollbackFor = Exception.class)
public Object DOtrance() {
int update = 0;
TranUser tranUser = transactionService.queryByName("憨憨2");
System.out.println(tranUser);
//事务1
if (tranUser != null) {
System.out.println(tranUser.getAge());
update = transactionService.update(tranUser.getAge() - 1);
if (update ==1 ) System.out.println("减一成功!");
}
TranUser user = transactionService.queryByName("憨憨2");
System.out.println(user);
//事务2
if (user != null) {
System.out.println(user.getAge());
int j = transactionService.update(user.getAge() + 1);
if (j ==1 ) System.out.println("加一成功!");
}
return update;
}
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW,rollbackFor = Exception.class)
public int update(int age) {
return tranUserDao.update(age);
}
该事务包含内部所有的事务,要么成功,要么失败,—若想事务1先提交 则后面事务与事务1不能再同一事务中执行!
result:
Consul:
TranUser(uname=憨憨2, sex=男, age=4)
4
减一成功!
TranUser(uname=憨憨2, sex=男, age=3)
3
加一成功!
在不通过缓存实现时,单线程操作只能将事务分离来保证后面事务的数据一致性