Java Spring状态机中的正确错误处理

Java Spring状态机中的正确错误处理,java,spring,spring-statemachine,Java,Spring,Spring Statemachine,我正在评估Spring Statemachine,希望 了解如何从转换中恢复 错误 我为已执行的操作定义了错误操作 在过渡期间。执行S1\u到\u S2\u动作 导致在S1\u到\u S2\u错误处理中处理的异常 我可以处理操作中的错误,但如何从错误中恢复 错误是什么?我试图在错误处理程序(context.getStateMachine().sendEvent(Events.RECOVER))中发送事件,但没有任何效果 @配置 @使能状态机 类StateMachineConfig 扩展EnumS

我正在评估Spring Statemachine,希望 了解如何从转换中恢复 错误

我为已执行的操作定义了错误操作 在过渡期间。执行
S1\u到\u S2\u动作
导致在
S1\u到\u S2\u错误处理中处理的异常

我可以处理操作中的错误,但如何从错误中恢复 错误是什么?我试图在错误处理程序(
context.getStateMachine().sendEvent(Events.RECOVER)
)中发送事件,但没有任何效果

@配置
@使能状态机
类StateMachineConfig
扩展EnumStateMachineConfigureAdapter{
操作S1到S2错误处理=上下文->{
System.out.println(BO+“ERROR!!!”);
System.out.println(“E:+context.getException());
System.out.println(“S:+context.getSource().getId());
System.out.println(“T:+context.getTarget().getId());
};
@凌驾
公共无效配置(StateMachineTransitionConfigurer转换)
抛出异常{
过渡
.withExternal()
.source(States.SI).target(States.S1).事件(Events.E1)
.行动(反行动)
.及()
.withExternal()
.source(States.S1).target(States.S2).事件(Events.E2)
.操作(S1到S2操作,S1到S2错误处理)
.及()
.withExternal()
.source(States.S2).target(States.SE).事件(Events.E3)
.行动(反行动);
}
}
令人惊讶的是,调用
stateMachine.hasStateMachineError()
之后返回
false

在错误操作中,我可以从错误中恢复谁?为什么
hasStateMachineError()

如果在转换期间引发异常,则返回
false

我认为,您需要明确执行以下操作:

try
    {
        ..
    }
    catch (WhateverException e)
    {
        stateMachine.setStateMachineError(e);
        throw e;
    }
在状态机转换函数中


我发布了一个不同问题的答案,这个问题可能也与您有关:

您是否想过在StateContext的ExtendedState的变量映射中放置一个标志,并在处理事件后检索它?然后,您可以通过获取stateMachineAccess并对其调用resetStateMachine来重置状态机

例如,在S1到S2错误处理中,您可以

context.getExtendedState().getVariables().put("recover", true);

然后,在您向状态机对象发送事件后,在您的服务层中,检查其上下文变量是否包含true recover标志,并将其重置为源状态。

我在这个主题上取得了一些进展,并将随后发布我的结果。如何获取此stateMachineAccess并调用resetStateMachine?