spring cloud微服务下手动回滚事务
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
这里使用的场景是,跨服务调用接口,比如:用户信息和用户积分信息在分别存在两个系统中,我们在用户系统中调用一个接口同时删除这两个信息,假设service层方法为deleteUserAndPoints(),具体如下所示:
deleteUserAndPoints(){
第一步:删除用户
第二步:通过restTemplate方式调用积分系统删除接口
根据返回的结果状态,成功或者失败
如果失败则:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(), 然后return 相应的提示信息(“删除失败”);如果直接return 其实事务不会回滚的,导致用户信息删除,积分信息未删除;另外,我们正常情况下可以直接 throw new RuntimeException(),也能回滚事务,但是这等于手动制造了一个系统异常,个人觉得很不友好
如果成功则:不处理
}