相信很多小伙伴在系统开发的过程经常会和其它系统做交互,写接口,涉及到数据的更新、插入操作,此时就需要有事务控制两个系统状态和数据保持一致性的必要了。这里说的一致性指的是要么一起成功,要么一起失败,最终一致性。
下面写一段代码,演示
/**
* 保存当前系统数据的同时,更新第三方系统的状态
**/
@Transactional(rollbackFor = Exception.class)
public boolean saveAndUpdateStatus(XxxModel model) {
try {
//保存表单
service.save(model);
//更新状态
boolean status = xxxService.updateStatus();
//根据调用结果 判断更新是否成功
if (!status) {
//抛出异常 让当前表单数据回滚
throw new Exception("XX系统某单状态更新失败");
}
return true;
} catch (Exception ex) {
logger.info("saveAndUpdateStatus error :{}", ex.getMessage());
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return false;
}
}