相信很多小夥伴在系統開發的過程經常會和其它系統做交互,寫接口,涉及到數據的更新、插入操作,此時就需要有事務控制兩個系統狀態和數據保持一致性的必要了。這裏說的一致性指的是要麼一起成功,要麼一起失敗,最終一致性。
下面寫一段代碼,演示
/**
* 保存當前系統數據的同時,更新第三方系統的狀態
**/
@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;
}
}