我需要创建StateMachine来管理任务。我知道如何创建状态机,但是我不能使用它。这是我的第一个状态机和MongoDB的第一个项目。
我的状态机:
@Configuration
@EnableStateMachine
class QuestStateMachineConfig : EnumStateMachineConfigurerAdapter<QuestState, QuestEvent>() {
@Throws(Exception::class)
override fun configure(states: StateMachineStateConfigurer<QuestState, QuestEvent>) {
states.withStates()
.initial(QuestState.AWAITING)
.state(QuestState.ASSIGNED)
.state(QuestState.MARKED_TO_REJECT)
.state(QuestState.IN_PROGRESS)
.end(QuestState.DONE)
.end(QuestState.REJECTED)
}
@Throws(Exception::class)
override fun configure(transitions: StateMachineTransitionConfigurer<QuestState, QuestEvent>) {
transitions.withExternal()
.source(QuestState.AWAITING).target(QuestState.ASSIGNED).event(QuestEvent.ASSIGN)
.and()
...
}
我需要创建一个状态为AWAITING的任务,接下来,当用户使用更新操作时,我必须对其进行修改并将其保存在数据库中。怎么做?以及如何监听此操作的onSuccess回调?
答案 0 :(得分:0)
我需要创建一个状态为AWAITING的任务
这通常应该是在数据库中创建的实体。 您可能想使用状态机来管理该实体的状态。
要获取SM的实例,您只需注入它-由于@EnableStateMachine
已经定义了一个实例-在启动应用程序时,将创建一个SM,您可以将其注入到需要的地方。
“当用户使用更新时,我必须修改并将其保存在数据库中 行动。怎么做?”
在某些时候,“更新操作”需要转换为“更新事件”。 根据您的需求,这里有很多选择:
以常规方式(例如存储库)更新数据库中的任务,然后将SM中的状态令牌移动到该用户的任务的正确状态(您将需要某种方式来关联用户,即任务和SM实例)。
“更新操作”时-向SM发送事件,并让SM更新数据库中的任务并转换为新状态。这可以通过使用“ {actions”或听特定的偶数并使用SM“ listener”对此做出反应来实现。
如何收听此操作的onSuccess回调?
请参阅StateMachineListener
作为起点,并查看此answer。