Add status checks in CommandLineJobOperator by ch200203 · Pull Request #5058 · spring-projects/spring-batch

public int restart(long jobExecutionId) {
    logger.info(() -> "Restarting job execution with ID: " + jobExecutionId);
    try {
        JobExecution jobExecution = this.jobRepository.getJobExecution(jobExecutionId);
        if (jobExecution == null) {
            logger.error(() -> "No job execution found with ID: " + jobExecutionId);
            return JVM_EXITCODE_GENERIC_ERROR;
        }
        BatchStatus status = jobExecution.getStatus();
        if (status != BatchStatus.FAILED && status != BatchStatus.STOPPED) {
            logger.error(() -> "Cannot restart job execution " + jobExecutionId
                    + ": current status is " + status + " (must be FAILED or STOPPED).");
            return JVM_EXITCODE_GENERIC_ERROR;
        }
        JobExecution restartedExecution = this.jobOperator.restart(jobExecution);
        return this.exitCodeMapper.intValue(restartedExecution.getExitStatus().getExitCode());
    }
    catch (Exception e) {
        return JVM_EXITCODE_GENERIC_ERROR;
    }
}

public int abandon(long jobExecutionId) {
    logger.info(() -> "Abandoning job execution with ID: " + jobExecutionId);
    try {
        JobExecution jobExecution = this.jobRepository.getJobExecution(jobExecutionId);
        if (jobExecution == null) {
            logger.error(() -> "No job execution found with ID: " + jobExecutionId);
            return JVM_EXITCODE_GENERIC_ERROR;
        }
        BatchStatus status = jobExecution.getStatus();
        if (status != BatchStatus.STOPPED) {
            logger.error(() -> "Cannot abandon job execution " + jobExecutionId
                    + ": current status is " + status + " (must be STOPPED).");
            return JVM_EXITCODE_GENERIC_ERROR;
        }
        JobExecution abandonedExecution = this.jobOperator.abandon(jobExecution);
        return this.exitCodeMapper.intValue(abandonedExecution.getExitStatus().getExitCode());
    }
    catch (Exception e) {
        return JVM_EXITCODE_GENERIC_ERROR;
    }
}