如何在 Spring 状态机上检索和查找当前状态?

How to retrieve and find current state on Spring State Machine?

我正在创建一个需要 FSM 的项目,我选择 Spring 状态机来帮助我解决问题。我正在使用 JPA 并试图弄清楚如何根据我当前的状态启动状态机,从 JPA 存储库检索状态。我在文档中找到了这种方法: state machine persist

但我也对这种方法感到困惑:persisting state machine

我不是要保留所有状态机配置,而是仅根据我的实体状态启动和发送事件。但在这两种情况下,我都不知道如何放置 jpa 存储库来查找我当前的状态。

现在我正在尝试这种方法:

class StateMachineAdapter<S, E, T> {

lateinit var stateMachineFactory: StateMachineFactory<S, E>

lateinit var persister: StateMachinePersister<S, E, T>

fun stateMachineRestore(contextObject: T): StateMachine<S, E> {
    val stateMachine: StateMachine<S, E> = stateMachineFactory.getStateMachine()
    return persister.restore(stateMachine, contextObject)
}


fun persist(stateMachine: StateMachine<S, E>, contestation: T) {
    persister.persist(stateMachine, contestation)
}

fun create(): StateMachine<S, E> {
    val stateMachine: StateMachine<S, E> = stateMachineFactory.getStateMachine()
    stateMachine.start()
    return stateMachine
 }


 }

我在 Spring 文档中找到了这段代码,我认为它可以用 JpaRepository 代替:

public void change(int order, String event) {
Order o = jdbcTemplate.queryForObject("select id, state from orders where id = ?", new Object[] { order },
        new RowMapper<Order>() {
            public Order mapRow(ResultSet rs, int rowNum) throws SQLException {
                return new Order(rs.getInt("id"), rs.getString("state"));
            }
        });
handler.handleEventWithState(MessageBuilder.withPayload(event).setHeader("order", order).build(), o.state);
 }

使用现有功能确实很难做到这一点,因为您可能已经从示例和文档中看到了很多移动部件。

我目前正在努力在下一个 1.2.8 版本中围绕这个问题进行大修,以使坚持更容易。如果您愿意使用快照(在 1.2.x 分支中)直到 1.2.8 出来,然后从检查新示例开始 datajpapersist sample. Based on same concepts as storing configs but with new persist classes in spring-statemachine-data. Also issues around this 1.2.8 gh issues.

最好能得到一些反馈。