![](/img/trans.png)
[英]How to get the start or end date of the last execution of a Spring Batch job that has a completed status?
[英]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_execution
, batch_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.