在多阶段更新中进行回滚的最佳实践?

时间:2017-03-16 21:29:46

标签: java spring spring-boot transactions

我们有一个数据对象,其属性分布在三方之间,

  1. 使用http
  2. 的内部服务
  3. DB
  4. 在更新该对象的数据时,我们不想让对象部分更新。因此,如果所有各方都参与更新,将会做

    1 -> 2 -> 3 
    

    顺序。但是如果在步骤1中更新成功并且在步骤2中失败,则我们需要回滚步骤1;如果步骤1& 2成功,步骤3失败,然后步骤1& 2都应该还原。这是一个Spring Boot 1.4,Java 8应用程序。有没有任何优雅的方式让我以编程方式实现它,而不是在第2步&中尝试/捕获3?

    希望我能解释清楚。非常感谢任何帮助/线索

2 个答案:

答案 0 :(得分:1)

您可以查看集成模式,为您实现这些模式的库(例如Apache Camel)或专有产品(例如Mule(我认为贵,您可能永远不会选择它)或业务流程管理流程,但这些都是您自己需要做出的设计决策。决定不使用任何这些更重量级的方法可能是完全可以的。有关于集成的分配,您可以根据需要找到合适的解决方案来查看该字段,但我不会在其中投入太多时间,只需弄清楚什么是足够好的。

注意:您可能会在分布式交易中找到相关材料,并且您会找到相信它们的人,就像有些人从小就相信复活节兔子一样。我不会告诉你他们不是真的,(过去我已经收到过选票):),但我只是说我还没有见证他们,也不期望。 / p>

答案 1 :(得分:0)

如果我理解得很清楚,第一次和第二次通话超出了您的范围,您可以在数据库交易中轻松回滚?您可以应用补偿模式以补偿已更新的内容。

  • 您需要在更新过程之前存储对象状态。
  • 如果在步骤2或3中出现问题,将触发补偿处理程序以恢复更改(它将使用之前的状态进行更新)。