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
。
在啓動狀態機或我發送事件時都沒有錯誤,並且轉換中的操作從不運行。
我錯過了什麼?