java - 如何从服务器关闭之前的最后一个状态恢复弹簧状态机?
问题描述
假设我想使用状态为 -(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");
}
这似乎不是一件体面的事情,我想知道是否有更好的方法来做到这一点。
解决方案
您描述的用例与Persist Recipe非常相似。如果要处理重新启动的服务器,则需要持久性存储。在您的情况下,我会为每个订单在数据库中保留一个状态机实例,您可以为机器提供任何 ID(包括订单 ID),或按顺序映射机器 UUID。
机器当前状态也保持不变,并应反映订单状态,以防您在订单本身中没有它
推荐阅读
- sql - SQL将所有查询行连接成一行
- ksqldb - KSQL 对象数组
- r - 在 for 循环中操作数据帧列表
- wordpress - 如何对已注销的用户隐藏搜索框
- node.js - 部署 Outlook 加载项的最佳实践
- java - 如何扩展cardView以显示带有下降动画的android中的隐藏元素?
- c# - 如果表格大于 1 页,RDLC 组不插入分页符(数据打印/导出)
- linux - 在 Linux 中过滤命令的输出
- python - 根据RGBA图像通道向matplotlib colorbar添加色标
- javascript - 如何使用 JavaScript 打开保存的网络应用程序?