2017-01-03 36 views

回答

0

好的 - 我终于找到了。

要使状态机停止,必须定义一个带有伪状态END的状态。达到此状态时,将通知StateMachineListener机器已停止。

下面是我使用的弹簧配置的轮廓。一些细节已被忽略。

@Override 
public void configure(StateMachineStateConfigurer<String, String> states) throws Exception { 
    states 
      .withStates() 
      .initial("WAITING") 
      .state("FAILED", fail(), null) 
      .state("SUCCESS", success(), null) 
      .end("COMPLETED") 

    ; 
} 

在过渡配置,你这样做:

@Override 
public void configure(StateMachineTransitionConfigurer<String, String> transitions) throws Exception { 
    transitions 
      .withExternal().source("FAILED").target("COMPLETED") 
      .and().withExternal().source("SUCCESS").target("COMPLETED") 
    ; 
} 
+0

噢,这看起来是正确的。昨天晚上注意到了这个问题,并且正要问你的机器配置是什么(原始问题)。当你最初说你有“伪状态配置”时,你是否真的没有这种情况? –

+0

我以为我有一个结束状态,但它是错误配置。我这样做: 状态 .withStates() .initial( “等待”) .STATE( “失败”,失败(),null)的 .END( “失败”) 这似乎不工作。在被列为国家之前,该国必须被宣布为最终国家。 –

+0

所以看起来像是状态是用state()方法声明的,或者是像end()这样的伪状态之一声明的,而不是两者。至少只有第一个声明有效。我无法从文档中读出它。 –

相关问题