2

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

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

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

  • Episode从数据库加载一个
  • EpisodeState从该Episode实例中的状态机设置当前状态。
  • 向状态机发送事件。
  • 从 Statemachine(发布事件)获取结果状态并EpisodeState在我的Episode实例中设置。
  • 保存Episode实例。

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

我已经StateMachineInterceptorAdapter<EpisodeState, EpisodeEvent>preEvent.

4

1 回答 1

5

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

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

stateMachine.stop();
stateMachine
    .getStateMachineAccessor()
    .doWithAllRegions(access ->
        access.resetStateMachine(new DefaultStateMachineContext<>(startingState, null, null, null)));
stateMachine.start();
于 2017-02-03T19:03:09.533 回答