2017-01-03 35 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()這樣的僞狀態之一聲明的,而不是兩者。至少只有第一個聲明有效。我無法從文檔中讀出它。 –

相關問題