Spring状态机持久性



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

我的Statemachine的类型是StateMachine<EpisodeState, EpisodeEvent>

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

  • 从数据库加载Episode
  • 从该Episode实例中的EpisodeState设置Statemachine的当前状态
  • 将事件发送到状态机
  • 从Statemachine(post-event)获取结果状态,并在我的Episode实例中设置EpisodeState
  • 保存Episode实例

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

我已经用StateMachineInterceptorAdapter<EpisodeState, EpisodeEvent>配置了状态机,我可以在stateChange前/后、Transition前/后以及preEvent中看到信息。

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

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

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

相关内容

  • 没有找到相关文章

最新更新