我有两个工作(SampleJob,NewJob) NewJob 取决于 SampleJob 的输出,所以 NewJob 必须等到 SampleJob 完成。我已经编写了这样的代码来实现这一点。直到春季版本 4.3.22.RELEASE 它工作正常。现在,在作业启动器步骤之后,它没有触发 endStep,因此我的作业在作业侦听器的步骤之后的存在状态为 UNKNOWN
<batch:job id="SAMPLE_JOB" job-repository="jobRepository">
<batch:step id="startStep" next="processStep">
<batch:tasklet ref="timerBegin" />
</batch:step>
<batch:step id="processStep" next="sampleJobLauncher">
<batch:tasklet ref="dataProcessTasklet" />
</batch:step>
<batch:step id="sampleJobLauncher" next="endBaselElRatioStep">
<job ref="NEW_JOB" job-launcher="jobLauncher" job-parameters-extractor="jobParametersExtractor"/>
</batch:step>
<batch:step id="endStep" >
<batch:tasklet ref="timerEnd" />
</batch:step>
<batch:listeners>
<batch:listener ref="SampleJobListener" />
</batch:listeners>
</batch:job>
在导致此问题的 jobstep.java 代码下方的最新春季版本中,它将 Job1 退出代码覆盖为 UNKNOWN
private ExitStatus determineStepExitStatus(StepExecution stepExecution, JobExecution jobExecution) {
ExitStatus exitStatus = stepExecution.getExitStatus() != null ? stepExecution.getExitStatus() : ExitStatus.COMPLETED;
return exitStatus.and(jobExecution.getExitStatus());
}