首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理数据不一致

如何处理数据不一致
EN

Stack Overflow用户
提问于 2020-03-28 12:58:47
回答 1查看 287关注 0票数 1

我的应用程序在Spring 4.2和postgres数据库上。在我的应用程序中,我们使用了一个API,它是使用spring编写的,它有自己的数据库(mysql)。

代码语言:javascript
复制
@Transaction(rollbackfor = Exception.class)
updateOrder(Order order) {

    // This insert is part of my application
    update(order); //**STEP - 1**

   //This is not part of our application &
   // happening in api written in spring boot.
   Integer transactionId = updateOrderWorkflow(order);// **STEP - 2**

   //Below updateOrderWithTransactionId is part of my application
   //Updates the order with the transaction Id
   updateOrderWithTransactionId(order, transactionId); //**STEP - 3**
}

如果步骤3失败,那么我必须回滚在消费api中所做的更改。对于回滚,我编写了补偿/回滚方法,该方法回滚到旧的工作流状态。

现在是问题场景:

如果一个进程(PROCESS_1)正在处理上述updateOrder()方法并达到步骤3,但在步骤3中此进程失败之前,另一个进程(PROCESS_2)尝试访问updateOrder()方法并更新步骤2。现在,PROCESS_1在步骤3中失败,它调用补偿/回滚方法,但是PROCESS_2成功地完成了步骤3。

这会造成数据不一致。如何处理这种情况?

EN

回答 1

Stack Overflow用户

发布于 2020-03-28 18:05:55

听起来问题是,步骤2中的updateOrderWorkflow公开了PROCESS_1事务在提交之前所做的更改。

我要做的是:

  • 在步骤2中更改updateOrderWorkflow,这样它就不会显示未提交的更改。它所做的任何更改都必须在与事务ID相关联的临时空间中进行。
  • 向该API添加了一个API端点,以提交或回滚事务的更改。如果已提交,则临时空间中的更改将在全球范围内可见。如果回滚,这些更改将被丢弃。
  • updateOrder方法中使用新的提交API端点,在回滚处理程序中使用回滚API。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60901467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档