@Transactional(rollbackFor = Exception.class)
这个注解应该都用过,加载某个方法上,如果方法报错,则方法内部操作的数据会自动回滚
问题 : 最近做了一个注册的功能,因为某些原因,请求需要先调用用户注册,再调用资料保存的方法
问题在于在资料保存时如果异常,则该用户没法再次注册因为,账号已经存在了,又不能在保
存资料的方法加@Transactional(rollbackFor = Exception.class),这样只会回滚资料的数据,
而注册的用户依然存在,需要在出现异常时清理掉用户,重新注册
解决:
@Autowired
private PlatformTransactionManager transactionManager;
public Result saveUnitBasicInformation(UnitBasicInformationAO unitBasicInformation) {
// 获取当前事务状态
TransactionStatus status =
transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
//处理业务
//没有异常手动提交事务
transactionManager.commit(status);
return Result.ok(unitId);
} catch (Exception e) {
//手动触发回滚
transactionManager.rollback(status);
//清理用户信息
clearUser();
throw new DefineException("注册失败!请联系管理员");
}
}