相关疑难解决方法(0)

同步执行状态动作

我正在使用具有多个区域的 Spring 状态机,并且我将某些区域配置为具有 entryAction 和 exitAction。

我最近意识到,操作的回调在不同的线程中运行,有时它们直到状态转换完成后才完成。

以下是安排操作时的堆栈跟踪:

    at org.springframework.statemachine.state.AbstractState.entry(AbstractState.java:208)
    at org.springframework.statemachine.state.ObjectState.entry(ObjectState.java:156)
    at org.springframework.statemachine.support.AbstractStateMachine.entryToState(AbstractStateMachine.java:1216)
    at org.springframework.statemachine.support.AbstractStateMachine.entryToState(AbstractStateMachine.java:1161)
    at org.springframework.statemachine.support.AbstractStateMachine.setCurrentStateInternal(AbstractStateMachine.java:971)
    at org.springframework.statemachine.support.AbstractStateMachine.setCurrentState(AbstractStateMachine.java:949)
    at org.springframework.statemachine.support.AbstractStateMachine.setCurrentState(AbstractStateMachine.java:944)
    at org.springframework.statemachine.support.AbstractStateMachine.setCurrentStateInternal(AbstractStateMachine.java:1038)
    at org.springframework.statemachine.support.AbstractStateMachine.setCurrentState(AbstractStateMachine.java:949)
    at org.springframework.statemachine.support.AbstractStateMachine.switchToState(AbstractStateMachine.java:841)
    at org.springframework.statemachine.support.AbstractStateMachine.access$400(AbstractStateMachine.java:77)
    at org.springframework.statemachine.support.AbstractStateMachine$2.transit(AbstractStateMachine.java:301)
    at org.springframework.statemachine.support.DefaultStateMachineExecutor.handleTriggerTrans(DefaultStateMachineExecutor.java:248)
    at org.springframework.statemachine.support.DefaultStateMachineExecutor.processTriggerQueue(DefaultStateMachineExecutor.java:395)
    at org.springframework.statemachine.support.DefaultStateMachineExecutor.access$100(DefaultStateMachineExecutor.java:61)
    at org.springframework.statemachine.support.DefaultStateMachineExecutor$1.run(DefaultStateMachineExecutor.java:281)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
    at org.springframework.statemachine.support.DefaultStateMachineExecutor.scheduleEventQueueProcessing(DefaultStateMachineExecutor.java:300)
    at org.springframework.statemachine.support.DefaultStateMachineExecutor.execute(DefaultStateMachineExecutor.java:144)
    at org.springframework.statemachine.support.AbstractStateMachine.sendEventInternal(AbstractStateMachine.java:559)
    at org.springframework.statemachine.support.AbstractStateMachine.sendEvent(AbstractStateMachine.java:211)
Run Code Online (Sandbox Code Playgroud)

为了避免竞争条件并确保功能完成后状态进入/退出操作完成sendEvent,我想使用同步任务调度程序,但我不认为有这样的事情(我必须实现我自己的) )。或者是否有其他方法可以确保我的进入/退出操作在转换后完成?

spring multithreading spring-statemachine

1
推荐指数
1
解决办法
2654
查看次数