Spring 状态机持久性
Spring Statemachine persistence
我正在测试 Spring 状态机,特别是我对应用状态机来管理我的对象的状态很感兴趣。
我的状态机是 StateMachine<EpisodeState, EpisodeEvent>
.
类型
我的业务对象 Episode
有一个 EpisodeState
类型的枚举 属性 (state
),它应该保存剧集的状态机状态。我有一个批处理过程,它将在初始化时获得一个 Statemachine 实例。我想遵循基本流程:
- 从数据库中加载一个
Episode
- 从
Episode
实例中的 EpisodeState
设置状态机的当前状态。
- 向状态机发送事件。
- 从状态机(post 事件)获取结果状态并在我的
Episode
实例中设置 EpisodeState
。
- 保存
Episode
实例。
文档提到 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();
我正在测试 Spring 状态机,特别是我对应用状态机来管理我的对象的状态很感兴趣。
我的状态机是 StateMachine<EpisodeState, EpisodeEvent>
.
我的业务对象 Episode
有一个 EpisodeState
类型的枚举 属性 (state
),它应该保存剧集的状态机状态。我有一个批处理过程,它将在初始化时获得一个 Statemachine 实例。我想遵循基本流程:
- 从数据库中加载一个
Episode
- 从
Episode
实例中的EpisodeState
设置状态机的当前状态。 - 向状态机发送事件。
- 从状态机(post 事件)获取结果状态并在我的
Episode
实例中设置EpisodeState
。 - 保存
Episode
实例。
文档提到 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();