手动回滚是正常的,但是在最后return错误信息的时候,还是会触发commitTransaction方法,由于手动回滚了,所以是Finished状态,导致控制台报错:
Global transaction[%s] not found, may be rollbacked.
但是我的自定义信息就无法返回了,前台只能接到Internal Server Error。
手动回滚注释掉倒是正常返回自定义信息,但是没法回滚。。。
@Override
@GlobalTransactional(name = "global-create-order", rollbackFor = Exception.class)
public ResultData createOrder(Order order) {
Integer result = orderMapper.insert(order);
if (result > 0) {
ResultData stoResultData = storageApi.decrease(order.getProductId(), order.getCount());
ResultData accResultData = accountFeign.decrease(order.getUserId(), order.getMoney());
// 全局事务未如期完成,手动回滚,并返回自定义错误信息
if (!Objects.equals(accResultData.getCode(), "200") || !Objects.equals(
stoResultData.getCode(), "200")) {
log.error("stoResultData:{}",stoResultData.getMessage());
log.error("accResultData:{}",accResultData.getMessage());
try {
// 在这里手动回滚
GlobalTransactionContext.reload(RootContext.getXID()).rollback();
} catch (TransactionException e) {
throw new RuntimeException(e);
}
} else {
order.setStatus(1);
orderMapper.updateById(order);
return ResultData.success(order);
}
}
// 返回自定义信息
return ResultData.fail(ReturnCodeEnum.RC999.getCode(), ReturnCodeEnum.RC999.getMessage());
}