首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >状态机弹簧

状态机弹簧
EN

Stack Overflow用户
提问于 2019-05-31 18:36:26
回答 1查看 117关注 0票数 0

我需要创建StateMachine来管理任务。我知道如何创建状态机,但我不会使用它。这是我的第一个状态机,也是MongoDB的第一个项目。

我的状态机:

代码语言:javascript
复制
@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()
            ...
   }

我需要创建一个等待状态的任务,下一步,当用户使用更新操作时,我必须修改它并将其保存在数据库中。该怎么做呢?如何监听该操作的onSuccess回调?

EN

回答 1

Stack Overflow用户

发布于 2019-06-02 14:41:26

我需要创建一个等待状态的任务

这通常应该是在数据库中创建的实体。您可能希望使用状态机来管理此实体的状态。

要获得SM的实例,您只需注入它-由于@EnableStateMachine,您已经定义了一个实例-在启动应用程序时将创建一个SM,您可以在需要的地方注入它。

“当用户使用更新操作时,我必须修改它并将其保存在数据库中。该如何操作?”

在某些情况下,“更新操作”需要转换为“更新事件”。这里有很多选择,这取决于你的需求:

  • 以正常方式(例如存储库)更新数据库中的任务,然后将SM中的状态令牌移动到正确的状态,以满足用户的任务(您将需要某种方法来关联用户、任务和SM实例)。

  • in "update action“-发送事件给SM,让SM更新DB中的任务并转换到新状态。这可以使用"actions“来实现,或者使用SM "listener".

监听特定事件并对其进行反应

如何监听该操作的onSuccess回调?

有关起点,请参阅StateMachineListener,也可查看此answer

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56393477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档