TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

deleteUserAndPoints(){

  第一步:删除用户

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

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

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

    如果成功则:不处理

}

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄