程序员,贵在坚持

spring cloud微服务下手动回滚事务

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

这里使用的场景是,跨服务调用接口,比如:用户信息和用户积分信息在分别存在两个系统中,我们在用户系统中调用一个接口同时删除这两个信息,假设service层方法为deleteUserAndPoints(),具体如下所示:

deleteUserAndPoints(){

  第一步:删除用户

  第二步:通过restTemplate方式调用积分系统删除接口

    根据返回的结果状态,成功或者失败

    如果失败则:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(), 然后return 相应的提示信息(“删除失败”);如果直接return 其实事务不会回滚的,导致用户信息删除,积分信息未删除;另外,我们正常情况下可以直接 throw new RuntimeException(),也能回滚事务,但是这等于手动制造了一个系统异常,个人觉得很不友好

    如果成功则:不处理

}

 

posted on 2019-04-14 11:04  程序员,贵在坚持  阅读(2861)  评论(0编辑  收藏  举报

导航