JSR 352:有没有办法从作业中判断特定作业执行是否重新启动?

JSR 352: Is there a way to tell if a particular job execution is a restart or not from within a job?

我知道如何使用作业上下文获取作业的执行 ID 和实例 ID。但是如果我重新启动一个作业,有没有办法知道作业执行是作业中的第一次执行还是重新启动,例如在 reader?

否,但有一个未解决的问题要求这样做: https://java.net/bugzilla/show_bug.cgi?id=7473

这有点过于复杂(正如另一个答案所指出的,有一个问题要考虑对未来的 Batch 1.1 进行增强)。

你可以这样做:

//
// Assumes JobContext injected into 'jobCtx' field
//
private boolean isRestart() {
    JobOperator jo = BatchRuntime.getJobOperator();
    JobInstance jobInstance = jo.getJobInstance(jobCtx.getExecutionId());
    int numExecutions = jo.getJobExecutions(jobInstance).size();
    return numExecutions > 1;
}