【问题标题】:How to resume the spring state machine from the last state it was in just before the server went down?如何从服务器关闭之前的最后一个状态恢复弹簧状态机?
【发布时间】:2021-07-30 13:05:00
【问题描述】:

假设我想使用状态为 -(S1,S2,S3) 的 SSM 对电子商务网站上的订单进行建模。当服务器重新启动时,特定的订单在 S2。我希望订单能够从 S2 中提取并在下次恢复。 我能想到的一种方法是在订单从 S1 转换到 S2 之后将 SSM ID 和状态“S2”保存在数据库中。 除此之外,我们可以有一个管理面板,任何人都可以在其中输入 SSM ID 并提交。此 SSM ID 可用于从数据库中检索订单的状态。但是,我必须编写一个 if-else 块,它会发出一个适当的事件,看起来像:

if (stateFromDatabase.equals("S1") {
    stateMachine.sendEvent("E1");
} else if (stateFromDatabase.equals("S2")) {
    stateMachine.sendEvent("E2");
} else if (stateFromDatabase.equals("S3")) {
    stateMachine.sendEvent("E3");
}

这似乎不是一件体面的事情,我想知道是否有更好的方法。

【问题讨论】:

  • 如果你发现了,请告诉我

标签: java spring spring-boot spring-data-jpa spring-statemachine


【解决方案1】:

您描述的用例与Persist Recipe 非常相似。如果要处理重新启动的服务器,则需要持久性存储。在您的情况下,我会为每个订单在数据库中保留一个状态机实例,您可以为机器提供任何 ID(包括订单 ID),或按顺序映射机器 UUID。

机器当前状态也是持久的,并且应该反映订单状态,以防您在订单本身中没有它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多