Spring 状态机持久性

Spring Statemachine persistence

我正在测试 Spring 状态机,特别是我对应用状态机来管理我的对象的状态很感兴趣。

我的状态机是 StateMachine<EpisodeState, EpisodeEvent>.

类型

我的业务对象 Episode 有一个 EpisodeState 类型的枚举 属性 (state),它应该保存剧集的状态机状态。我有一个批处理过程,它将在初始化时获得一个 Statemachine 实例。我想遵循基本流程:

文档提到 extendedState 属性,在我的测试中它是空的,但似乎支持任意对象的映射,我想我可以用它来保存我的 Episode,但我不知道如何将状态机的当前状态设置为 Episode.

中的 EpisodeState

我已经用 StateMachineInterceptorAdapter<EpisodeState, EpisodeEvent> 配置了状态机,我可以在 pre/post stateChange 和 pre/post Transition 以及 preEvent 处看到信息。

进一步研究(不在 Spring Statemachine 文档中),我找到了一种设置状态机状态的方法:

假设您在名为 startingState 的变量中有所需的开始状态,您可以这样做:

stateMachine.stop();
stateMachine
    .getStateMachineAccessor()
    .doWithAllRegions(access ->
        access.resetStateMachine(new DefaultStateMachineContext<>(startingState, null, null, null)));
stateMachine.start();