带有分区的 Java 批处理步骤返回错误的批处理状态和退出状态



我在JDL中有一个(非常简单的(java批处理作业,只需两个步骤。

当步骤"下载"返回状态"已停止"时,作业应停止。 重新启动后,应调用停止通知。

没有分区,一切正常。

没有分区的统计信息

after step=download batchStatus=COMPLETED exitStatus=STOPPED
after job=job       batchStatus=STOPPED   exitStatus=STOPPED

使用分区,我得到了批处理结束退出的非常奇怪的状态。 如果下载步骤返回"已停止",则作业不会停止。 即使分区只有一个线程和一个分区。

尝试重新启动时,会引发以下错误(当然(。 JBERET000609:作业执行 1 已完成,无法重新启动。

带分区的统计信息

after step=download batchStatus=STARTED   exitStatus=null
after job=job       batchStatus=COMPLETED exitStatus=COMPLETED

工作描述

<job id="job" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0" restartable="true">
<step id="download" next="notify">
<batchlet ref="downloadBatchlet">
</batchlet>
<partition>
<mapper ref="basicPartition" />
</partition>
<stop on="STOPPED" restart="notify"/>
</step>
<step id="notify">
<batchlet ref="notifyBatchlet"></batchlet>
<end on="COMPLETED"/>
</step>
</job>

欢迎每一个提示和建议。我错过了什么?

无分区

在作业启动时,作业调用 - 下载批处理 => 停止 和停止。

重新启动作业时调用 - 通知批处理 => 已完成 并结束。

带隔断

在作业启动时,作业调用 - 下载批处理 => 停止 和停止。

重新启动作业调用时没有步骤和结束。

@Named
public class DownloadBatchlet extends AbstractBatchlet {
@Override
public String process() throws Exception {
return BatchStatus.STOPPED.toString();
}
@Override
public void stop() throws Exception {
}
}

分区与顶级批处理/退出状态

在 Java 批处理中,步骤本身以及每个分区都有单独的批处理和退出状态。

由于"转换"(到下一步,或停止作业,在您的情况下(发生在此处的作业级别,因此您需要在步骤的"顶级"设置非默认退出状态,而不仅仅是在每个分区的级别。

如果要包含对每个分区的状态做出反应的逻辑,一个好的起点是 PartitionAnalyzer#analyzeStatus 方法,该方法在每个分区终止时调用。 这在"顶级"线程上运行(PartitionReducer也是如此(。

简单示例分析器

public class MyPartitionAnalyzer extends AbstractPartitionAnalyzer {
@Inject
private StepContext stepCtx;
@Override
public void analyzeStatus(BatchStatus batchStatus, String exitStatus) throws Exception {
// Overrides default exit status if non-COMPLETED partition seen
if (!exitStatus.equals(BatchStatus.COMPLETED)) {
stepCtx.setExitStatus(exitStatus);
}
}
}

您可以使用任何您想要对分区的批处理和退出状态做出反应(或不做出反应(的逻辑。 这里的关键是分析器在顶级步骤线程上运行,因此设置步骤级别状态。 另一方面,batchlet 的返回值仅设置分区级别状态。

分析器可用于根据需要"聚合"分区级别状态。 如果不执行任何操作,则步骤级退出状态默认为步骤级批处理状态,因此,如果步骤正常完成,则步骤级退出状态为 COMPLETE。

相关内容

  • 没有找到相关文章

最新更新