我定義了一個Spring參數restart =「false」的Spring-Batch作業,因爲我不希望再次啓動同一個作業實例。重新啓動不可重新啓動的作業的新實例
<batch:job id="myJob" restartable="false">
<batch:step id="myStep">
<batch:tasklet>
...
</batch:tasklet>
</batch:step>
</batch:job>
工作是在其他兩個高級別作業引用:
<batch:job id="hightLevelJob1" restartable="false">
<batch:step id="myHighLevelJob1Step1" next="...">
<batch:job ref="myJob"/>
</batch:step>
...
</batch:job>
<batch:job id="hightLevelJob2" restartable="false">
<batch:step id="myHighLevelJob2Step1" next="...">
<batch:job ref="myJob"/>
</batch:step>
...
</batch:job>
我現在有兩個的JUnit測試,每個啓動高層次的工作之一:
@Autowired
private JobOperator jobOperator;
@Test
public void testHighLevelJob1() throws JobExecutionException {
final Long executionId = jobOperator.startNextInstance("myHighLevelJob1");
...
}
@Test
public void testHighLevelJob2() throws JobExecutionException {
final Long executionId = jobOperator.startNextInstance("myHighLevelJob2");
...
}
的第一個測試運行良好,而第二個測試運行良好,而第二個測試則拋出JobRestartException:
JobInstance already exists and is not restartable
我正在使用jobOperator.startNextInstance(),因此它創建了一個新的作業。但是,這似乎只適用於開始的高級別工作。它看起來像Spring-Batch試圖重新使用引用的作業。
如何將作業配置爲每次都創建引用作業的新實例?
我試過了,但異常保持不變。我已經在使用類__org.springframework.batch.core.launch.support.RunIdIncrementor__。在使用調試器進行檢查時,增量器僅針對較高級別的作業執行,但以某種方式從不執行所引用的作業。 – Jack 2012-07-20 11:38:45