Пружинное состояние машины задается кратным начальным состоянием

У меня серийный статус порядка, как

 public enum orderStateEnum {
        STATE_UNUSED("UNUSED"),
        STATE_ORDERED("ORDERED"),
        STATE_ASSIGNED("ASSIGNED"),
        STATE_ASSIGN_EXCEPTION("ASSIGN_EXCEPTION"),
        STATE_PACKED("PACKED"),
        //and so on
    }

и я хочу использовать spring.statemachine(или другую реализацию конечного автомата) для управления переходом, как из STATE_UNUSED to STATE_ORDERED STATE_ORDERED to STATE_ASSIGNED STATE_ORDERED to STATE_ASSIGN_EXCEPTION STATE_ASSIGNED to STATE_PACKED однако все данные о заказах хранятся в базе данных, поэтому в моем случае, если у меня есть заказ с состоянием STATE_ASSIGNED, я получаю состояние заказа из базы данных, но в spring.statemachine я должен ``` StateMachine stateMachine = new StateMachine(); stateMachine.createEvent(Event_take_order);

когда я создаю новый экземпляр stateMachine, его начальное состояние - STATE_UNUSED, однако я хочу, чтобы начальное состояние было состоянием, которое я извлекаю из базы данных STATE_ASSIGNED, как я могу этого достичь? Я прочитал [ https://docs.spring.io/spring-statemachine/docs/1.0.0.BUILD-SNAPSHOT/reference/htmlsingle/] но не могу найти в этом никакого решения.

0 ответов

Когда вы создаете новый StateMachine, вы можете получить StateMachineAccessor, используя stateMachine.getStateMachineAccessor()

StateMachineAccessor - это:- Функциональный интерфейс для StateMachine, позволяющий программный доступ к базовым функциям. Функции с префиксом "doWith" будут предоставлять StateMachineAccess через StateMachineFunction для лучшего функционального доступа с помощью jdk7. Функции с префиксом "with" лучше подходят для лямбда-выражений.(Из Документов Java)

StateMachineAccessor имеет метод doWithAllRegions, в котором вы можете предоставить реализацию StateMachineFunction (интерфейс), а doWithAllRegions выполнит данную StateMachineFunction со всеми рекурсивными регионами.

Итак, для достижения того, что вы пытаетесь сделать, код будет выглядеть так:-

StateMachine<orderStateEnum, Events> stateMachine = smFactory.getStateMachine();
stateMachine.getStateMachineAccessor().doWithAllRegions(access -> access
          .resetStateMachine(new DefaultStateMachineContext<>(STATE_ASSIGNED, null, null, null)));

Я предоставил реализацию интерфейсов с использованием лямбда-выражений.

Другие вопросы по тегам