4

我正在使用 Spring Statemachine 来提供用户的工作流程。我需要保持状态更改,以便用户的状态不会在重新启动时丢失。现在,我可以根据提供的示例执行此操作,但是缺少的一件事是如果确实发生崩溃,如何重新创建状态。

基本上,我想创建状态机并告诉它将自己设置为崩溃前的最后一个状态,并从数据库中复制任何扩展状态变量。有没有办法做到这一点?

4

2 回答 2

9

也许这可以帮助你:

stateMachine
                .getStateMachineAccessor()
                .doWithAllRegions(access -> {
                    access.resetStateMachine(new DefaultStateMachineContext<>({ResetState}, null, null, null, null));
                });
stateMachine.start();
stateMachine.sendEvent({NewEventFromResetState});
于 2017-02-14T16:51:14.927 回答
5

PersistPersistStateMachineHandler当状态机在状态之间转换时,示例正在使用配方更新数据库中的内容。在这个秘籍中要记住的一件重要的事情是它使用拦截器而不是侦听器来挂钩状态更改。如果在拦截器回调中完成数据库更新,则在发生错误/异常的情况下,状态机中的转换被拒绝,而如果使用侦听器错误将导致状态机和数据库彼此不一致。

另一件事是,此配方允许将reset状态机器化为特定状态,然后从那里继续。

如果用户不关心速度和垃圾,是否为每次更新创建新机器真的没关系。状态机实例化相对昂贵,因此简单地使用一个实例然后重置其状态是相对轻量级的操作。

目前,如何从状态机挂钩与 db 交互是非常低级的,因为在如何与 db 交互方面,您需要手动完成所有操作。目前没有自动调整,因为我们根本不知道 db 中有什么以及如何更新行。

于 2015-10-10T11:14:22.353 回答