0
我试图把一个非常简单的春天状态机,但它似乎并不想改变状态:
(重要的是要注意,即使我使用的是Spring State机和应用程序的其余部分是一个Spring应用程序,我不能使用注解驱动的方式来定义的机器。我必须使用的建设者)春天状态机不会改变状态
StateMachineBuilder.Builder<String, String> builder = StateMachineBuilder.builder();
try {
builder.configureConfiguration()
.withConfiguration()
.beanFactory(new StaticListableBeanFactory())
.listener(new StateMachineListenerAdapter<String, String>() {
@Override
public void stateChanged(State<String, String> from, State<String, String> to) {
System.out.println("State change to " + to.getId());
}
});
builder.configureStates()
.withStates()
.initial("initialState")
.states(Stream.of("initialState", "state1", "state2", "state3").collect(Collectors.toSet()))
.end("state3");
builder.configureTransitions()
.withExternal()
.state("initialState")
.target("state1")
.event("event1")
.action(stateContext ->
System.out.println(String.format("Event %s triggered", stateContext.getEvent()))
);
} catch (Exception e) {
e.printStackTrace();
}
StateMachine<String, String> stateMachine = builder.build();
stateMachine.start();
boolean complete = stateMachine.isComplete();
System.out.println("Statemachine is complete: " + complete);
State<String, String> state = stateMachine.getState();
System.out.println(state.getId());
stateMachine.sendEvent("event1");
state = stateMachine.getState();
System.out.println(state.getId());
当我运行上面的,我期待的是,第一个状态是initialState
,并且当我发送事件event1
时,状态将更改为state1
。我得到以下输出:
State change to initialState
Statemachine is complete: false
initialState
initialState
这告诉我的听众触发一次当机器第一次启动,并设置初始状态,由于某种原因,状态机报告,它是不完整的,这状态是initialState
我之前发送事件,并且发送事件后状态仍为initialState
。
在启动状态机或我发送事件时都没有错误,并且转换中的操作从不运行。
我错过了什么?