我正在撰寫一個 Spring Batch 行程(Spring boot 2.xx)。該作業根據上次更新日期從表中選擇一些行 -
(select * from tablename where last_upd_dt >= :lastruntime).
:lastruntime 是最后(成功)完成的作業運行的日期。我正在嘗試使用 JobListener/JobExecutionListener 從 Listener 類中的 beforeJob 方法中獲取此日期。
有沒有辦法利用 Spring Batch 框架提供的類?否則,我將不得不從另一個表中寫入和檢索此資訊。
uj5u.com熱心網友回復:
您可以使用JobExplorer API。它允許您獲取作業實體的作業執行情況。獲得后,您可以根據需要過濾結果并從JobExecution物件中獲取開始/結束日期。
uj5u.com熱心網友回復:
我能夠使用 JobExplorer API。
private Date fetchPreviousJobCompletetionDate() {
Date previousJobCompleteDate = null;
try {
Integer jobInstanceCount = jobExplorer.getJobInstanceCount("myjob");
List<JobInstance> jobInstances = jobExplorer.getJobInstances("myjob", 0, jobInstanceCount);
List<JobExecution> jobExecutions = jobInstances.stream().map(jobExplorer::getJobExecutions)
.flatMap(List<JobExecution>::stream)
.filter(param -> param.getExitStatus().equals(ExitStatus.COMPLETED)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(jobExecutions)) {
Optional<JobExecution> jobExecutionOptional = jobExecutions.stream().sorted((JobExecution execution1, JobExecution execution2) -> execution2.getStartTime()
.compareTo(execution1.getStartTime())).findFirst();
if (jobExecutionOptional.isPresent()) {
previousJobCompleteDate = jobExecutionOptional.get().getStartTime();
}
}
} catch (NoSuchJobException exception) {
log.error("Exception occurred {}", exception.getMessage());
}
return previousJobCompleteDate;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/366957.html
