我已经定义了一个带有参数 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-Tests,每个都启动一个高级作业:
@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 试图重用引用的作业。
如何将作业配置为每次都创建引用作业的新实例?