繁体   English   中英

如何获取Spring Batch中最后一个完成的job的start_time?

[英]How to get the start_time of the last completed job in Spring Batch?

假设这些是我的工作运行:

job_id | job_status
-------------------
1        COMPLETED
2        COMPLETED
3        FAILED
4        COMPLETED
5        FAILED

现在在作业 6的运行期间,我想找出最后一个成功完成的作业的开始时间,即作业 4

我怎么才能得到它?

我尝试使用JobExplorer API 但它根据输入count给出 output

如果有一个 COMPLETED 作业后跟 10 个 FAILED 作业,这对我不起作用。 那时我不会得到完成的工作。

List<JobInstance> jobInstances = jobExplorer.getJobInstances("myJob", 0, 10);

Optional<JobInstance> lastCompletedJobInstance =
jobInstances.stream()
            .filter(jobInstance -> {
                long instanceId = jobInstance.getInstanceId();
                return BatchStatus.COMPLETED == jobExplorer.getJobExecution(instanceId).getStatus();
             })
            .findFirst();

我需要的原因是因为在我的ItemReader中,我想使用类似于此的查询从我的数据库中获取增量记录:

SELECT * FROM items i WHERE i.created_at >= :lastSuccessfulJobRun

我不想手动查询批处理表,如batch_job_executionbatch_job_execution_context

我最终不得不自己编写一个 SQL 查询:

SELECT job_execution_id, start_time, end_time, status
FROM
batch_job_execution
WHERE
job_instance_id IN (SELECT job_instance_id FROM batch_job_instance WHERE job_name = :jobName)
AND 
status = :status
ORDER BY job_execution_id DESC LIMIT 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM