我定义了一个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