아주 간단한 스프링 상태 머신을 조합하려고하는데 상태를 변경하고 싶지 않습니다.
(스프링 상태를 사용 중이지만 기계, 응용 프로그램의 나머지 부분은. 내가 위를 실행하면)스프링 상태 머신 상태 변경 안 함
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
이 리스너가 한 번 트리거 할 때 컴퓨터 첫 시작하고 초기 상태를 설정 알려줍니다, 그 어떤 이유가 불완전 상태 머신 보고서, 상태가 I 전에 initialState
이다 : 나는 다음과 같은 출력을 얻을 이벤트를 보내면 그 상태는 여전히 initialState
입니다.
상태 시스템을 시작하거나 이벤트를 보낼 때 오류가 없으며 전환의 작업이 절대로 실행되지 않습니다.
무엇이 누락 되었습니까?